Universidad del Valle de Guatemala¶

Facultad de Ingeniería¶

Departamento de Computación¶


Laboratorio 2: Series de Tiempo¶

Integrantes:

  • Diego Alexander Hernández Silvestre, 21270
  • Linda Inés Jiménez Vides, 21169

Curso: Data Science
Sección: 10


Guatemala, 1 de agosto de 2024

✍️ Discusión / Cálculos - [Series de Tiempo] ✍️

En primera instancia, se importan las librerías requeridas para poder realizar los cálculos durante el laboratorio.

In [ ]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import sweetviz as sv
import statsmodels.api as sm
import matplotlib.pyplot as plt
from autoviz.AutoViz_Class import AutoViz_Class
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.stattools import adfuller
from pmdarima import auto_arima
from prophet import Prophet
from sklearn.metrics import mean_squared_error
from sklearn.linear_model import LinearRegression
from statsmodels.tsa.arima.model import ARIMA
%matplotlib inline

📚Dataset: CONSUMO-2024-05.xlsx¶

Las columnas que contienen la información sobre el diésel, se encuentran separadas en dos variables Diesel alto azufre y Diesel bajo azufre por lo que se implementa una función para llevar a cambo la combinación en una resultante.

In [ ]:
def combineDieselColumns(csvPath):
    print("📂 Iniciando la combinación de las columnas de Diesel...")

    try:
        # Leer el archivo CSV en un DataFrame
        df = pd.read_csv(csvPath)
        print(f"✅ Archivo cargado: {csvPath}")
    except Exception as e:
        print(f"❌ Error al cargar {csvPath}: {e}")
        return None
    
    if 'Diesel alto azufre' not in df.columns or 'Diesel bajo azufre' not in df.columns:
        print("❌ Las columnas 'Diesel alto azufre' o 'Diesel bajo azufre' no existen en el archivo CSV.")
        return None

    # Crear la nueva columna 'Diesel'
    df['Diesel'] = df['Diesel alto azufre'].replace(0, pd.NA).combine_first(df['Diesel bajo azufre'].replace(0, pd.NA))
    
    print("🏁 Combinación de columnas completada.")
    return df

csvPath = 'Consumo/CONSUMO-2024-05.csv'
dataConsumo = combineDieselColumns(csvPath)
📂 Iniciando la combinación de las columnas de Diesel...
✅ Archivo cargado: Consumo/CONSUMO-2024-05.csv
🏁 Combinación de columnas completada.

Luego, se realiza un filtrado de las columnas relevantes del dataset.

In [ ]:
dataConsumo = dataConsumo[['Fecha', 'Gasolina regular', 'Gasolina superior', 'Diesel', 'Gas licuado de petróleo']]
dataConsumo['Fecha'] = pd.to_datetime(dataConsumo['Fecha'])
dataConsumo.head()
Out[ ]:
Fecha Gasolina regular Gasolina superior Diesel Gas licuado de petróleo
0 2000-01-01 202645.20 308156.82 634667.06 194410.476190
1 2000-02-01 205530.96 307766.31 642380.66 174710.552381
2 2000-03-01 229499.56 331910.29 699807.25 189234.066667
3 2000-04-01 210680.40 315648.08 586803.98 174330.607143
4 2000-05-01 208164.34 319667.97 656948.2 191745.147619

Este es un método alternativo que se puede utilizar para hacer un EDA automatizado. Sin embargo, en comparativa con otros métodos, se decidió no utilizar pero se dejó a manera de proporcionar un recurso extra.

In [ ]:
#plt.figure(figsize=(12, 8))

#for i, column in enumerate(['Gasolina regular', 'Gasolina superior', 'Diesel', 'Gas licuado de petróleo'], 1):
#    plt.subplot(2, 2, i)
#    sns.histplot(dataConsumo[column], kde=True)
#    plt.title(f'Distribución de {column}')
#    plt.xlabel(column)

#plt.tight_layout()
#plt.show()

Para facilitar el EDA, se utilizó la librería AutoViz para automatizar este proceso. De este se puede destacar que en el dataset de Consumo, todas las variables cuentan con distribuciones asimétricas positivas, por lo que se puede deducir que existe una mayor concentración de valores bajos y algunos valores muy altos. Los graficos de caja y bigotes indican la presencia de valores atipicos en todas las variables y los Q-Q plots muestran que ninguna de las variables cuenta con una distribución normal.

In [ ]:
csvPath = 'Consumo/dataConsumo.csv'
dataConsumo.to_csv(csvPath, index=False)
AV = AutoViz_Class()
AV.AutoViz(csvPath)
Shape of your Data Set loaded: (293, 5)
#######################################################################################
######################## C L A S S I F Y I N G  V A R I A B L E S  ####################
#######################################################################################
Classifying variables in data set...
    Number of Numeric Columns =  4
    Number of Integer-Categorical Columns =  0
    Number of String-Categorical Columns =  0
    Number of Factor-Categorical Columns =  0
    Number of String-Boolean Columns =  0
    Number of Numeric-Boolean Columns =  0
    Number of Discrete String Columns =  0
    Number of NLP String Columns =  0
    Number of Date Time Columns =  0
    Number of ID Columns =  1
    Number of Columns to Delete =  0
    5 Predictors classified...
        1 variable(s) removed since they were ID or low-information variables
        List of variables removed: ['Fecha']
To fix these data quality issues in the dataset, import FixDQ from autoviz...
    All variables classified into correct types.
  Data Type Missing Values% Unique Values% Minimum Value Maximum Value DQ Issue
Fecha object 0.000000 100 Possible ID column: drop before modeling step.
Gasolina regular float64 0.000000 NA 160741.900000 894533.140000 No issue
Gasolina superior float64 0.000000 NA 300242.781667 768102.830000 Column has a high correlation with ['Gasolina regular']. Consider dropping one of them.
Diesel float64 0.000000 NA 507662.650000 1463008.430000 Column has a high correlation with ['Gasolina regular', 'Gasolina superior']. Consider dropping one of them.
Gas licuado de petróleo float64 0.000000 NA 167818.137897 588892.160000 Column has a high correlation with ['Gasolina regular', 'Gasolina superior', 'Diesel']. Consider dropping one of them.
Number of All Scatter Plots = 10
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
All Plots done
Time to run AutoViz = 1 seconds 

 ###################### AUTO VISUALIZATION Completed ########################
Out[ ]:
Fecha Gasolina regular Gasolina superior Diesel Gas licuado de petróleo
0 2000-01-01 202645.200000 308156.820000 6.346671e+05 194410.476190
1 2000-02-01 205530.960000 307766.310000 6.423807e+05 174710.552381
2 2000-03-01 229499.560000 331910.290000 6.998072e+05 189234.066667
3 2000-04-01 210680.400000 315648.080000 5.868040e+05 174330.607143
4 2000-05-01 208164.340000 319667.970000 6.569482e+05 191745.147619
5 2000-06-01 195088.740000 300347.700000 5.709199e+05 196321.933333
6 2000-07-01 204556.770000 308305.930000 5.764360e+05 192344.502381
7 2000-08-01 218388.510000 323011.860000 5.937708e+05 203727.080952
8 2000-09-01 213906.960000 326455.720000 5.901454e+05 194565.097619
9 2000-10-01 213606.650000 323843.630000 6.411134e+05 210261.826190
10 2000-11-01 209227.480000 320788.080000 6.570863e+05 205027.952619
11 2000-12-01 230020.700000 366987.560000 6.732823e+05 200247.555000
12 2001-01-01 164547.351667 300242.781667 5.693288e+05 179405.990278
13 2001-02-01 174838.811667 301483.401667 5.977498e+05 167818.137897
14 2001-03-01 201992.651667 355572.831667 7.360860e+05 186397.325992
15 2001-04-01 198683.391667 355826.761667 6.062577e+05 175820.345040
16 2001-05-01 182504.091667 336040.041667 6.640827e+05 178303.330754
17 2001-06-01 201379.481667 308804.701667 5.593330e+05 177826.928373
18 2001-07-01 214980.241667 350501.971667 5.894527e+05 191041.990278
19 2001-08-01 204646.771667 348414.651667 5.685464e+05 190295.990278
20 2001-09-01 188292.351667 324393.961667 5.331084e+05 184039.990278
21 2001-10-01 225240.951667 366261.631667 6.033712e+05 206176.990278
22 2001-11-01 210324.951667 351890.631667 6.261562e+05 201335.990278
23 2001-12-01 223209.951667 403561.631667 6.641902e+05 209792.990278
24 2002-01-01 200309.851667 368935.525833 7.266726e+05 196068.608730
25 2002-02-01 183119.341667 348917.785833 6.943448e+05 180209.801587
26 2002-03-01 212711.711667 385044.965833 6.563793e+05 186680.965873
27 2002-04-01 204765.621667 379741.975833 6.836462e+05 196167.161111
28 2002-05-01 201083.511667 375054.635833 7.071655e+05 201612.356349
29 2002-06-01 187629.421667 371138.585833 6.678207e+05 193024.399206
30 2002-07-01 201692.641667 399944.645833 6.567616e+05 204196.244444
31 2002-08-01 205240.771667 392355.615833 6.570997e+05 213625.432540
32 2002-09-01 177614.801667 347191.435833 6.536646e+05 209849.758730
33 2002-10-01 203097.241667 381595.195833 6.530533e+05 212932.327778
34 2002-11-01 207629.811667 384334.215833 6.714013e+05 210000.546825
35 2002-12-01 199619.271667 400645.415833 6.761924e+05 223830.396825
36 2003-01-01 193713.620000 376516.580000 7.698433e+05 213268.978571
37 2003-02-01 184354.610000 355760.810000 7.097836e+05 206815.011905
38 2003-03-01 201443.370000 361880.870000 7.864845e+05 216427.950000
39 2003-04-01 219004.312500 377395.170000 7.096264e+05 204403.511905
40 2003-05-01 200407.180000 390624.270000 7.559821e+05 216452.752143
41 2003-06-01 168327.720000 346941.840000 6.415401e+05 212069.040476
42 2003-07-01 174317.570000 377178.840000 6.317041e+05 231172.014286
43 2003-08-01 171665.050000 355682.720000 6.134286e+05 222312.707143
44 2003-09-01 174757.950000 348659.020000 5.829895e+05 225703.050000
45 2003-10-01 209314.450000 392041.780000 7.227636e+05 239665.042857
46 2003-11-01 168510.000000 330640.230000 6.398284e+05 229612.354762
47 2003-12-01 196081.990000 391327.660000 6.528724e+05 247544.638095
48 2004-01-01 203975.570000 381547.720000 6.569874e+05 235284.965714
49 2004-02-01 180290.240000 339576.460000 6.595404e+05 213288.683333
50 2004-03-01 206455.620000 379687.460000 7.462368e+05 233426.354762
51 2004-04-01 182379.920000 357595.810000 6.337661e+05 217530.876190
52 2004-05-01 160741.900000 322596.730000 5.563697e+05 225959.050238
53 2004-06-01 164782.500000 318811.500000 5.603935e+05 225673.464048
54 2004-07-01 182642.410000 346413.660000 5.830985e+05 243064.072857
55 2004-08-01 207432.800000 390304.280000 6.996108e+05 236324.768095
56 2004-09-01 194240.550000 364689.840000 6.126396e+05 225204.180238
57 2004-10-01 200323.530000 380441.550000 6.190848e+05 229626.058333
58 2004-11-01 214509.650000 378498.600000 7.052982e+05 225593.823095
59 2004-12-01 236733.030000 429109.100000 7.618643e+05 241915.005238
60 2005-01-01 209901.600000 321382.140000 7.246924e+05 227154.969762
61 2005-02-01 198775.610000 375768.830000 7.171168e+05 211814.375952
62 2005-03-01 231358.580000 410241.928000 8.021396e+05 224387.028333
63 2005-04-01 225644.890000 389737.160000 8.039969e+05 218555.206429
64 2005-05-01 187048.260000 343762.520000 7.153604e+05 230568.152381
65 2005-06-01 202161.790000 351906.820000 6.817434e+05 223151.259524
66 2005-07-01 213821.770000 389172.650000 6.786145e+05 236140.078571
67 2005-08-01 212696.380000 396871.120000 6.936811e+05 242734.740476
68 2005-09-01 196776.870000 378887.620000 6.662584e+05 223283.869048
69 2005-10-01 192270.240000 328052.560000 5.898302e+05 213139.580952
70 2005-11-01 185251.120000 360869.140000 7.012555e+05 222988.526190
71 2005-12-01 241035.130000 448688.520000 7.750272e+05 225410.429048
72 2006-01-01 211152.720000 382078.880000 7.509464e+05 217867.309524
73 2006-02-01 200551.400000 367944.250000 7.345308e+05 212328.607143
74 2006-03-01 233082.860000 427567.580000 8.750473e+05 232405.357143
75 2006-04-01 223479.450000 392050.290000 7.111852e+05 207612.269048
76 2006-05-01 222710.900000 379832.550000 7.342892e+05 232489.833333
77 2006-06-01 196511.220000 364359.350000 6.724289e+05 236563.828571
78 2006-07-01 210255.700000 392252.910000 6.844387e+05 239767.854762
79 2006-08-01 211202.140000 394585.280000 7.072197e+05 245672.016667
80 2006-09-01 204369.990000 382724.970000 6.507914e+05 256040.102381
81 2006-10-01 203061.390000 400793.810000 6.835431e+05 238514.633333
82 2006-11-01 205541.910000 401922.570000 7.391820e+05 228417.438095
83 2006-12-01 233936.830000 454373.130000 7.763303e+05 236333.111905
84 2007-01-01 216560.790000 418412.860000 8.103727e+05 217344.655952
85 2007-02-01 204991.910000 401425.140000 7.993946e+05 211149.360714
86 2007-03-01 239019.910000 454731.090000 9.566802e+05 264115.983333
87 2007-04-01 217536.230000 403732.560000 7.589886e+05 224818.876190
88 2007-05-01 224400.730000 426414.710000 8.117037e+05 259749.480952
89 2007-06-01 217473.910000 390991.360000 7.208968e+05 244505.283333
90 2007-07-01 219874.230000 416497.410000 7.215506e+05 261555.621429
91 2007-08-01 236565.570000 411088.530000 7.366209e+05 267634.121429
92 2007-09-01 207241.840000 390568.990000 6.695879e+05 254081.758571
93 2007-10-01 224750.770000 419001.810000 7.387029e+05 264936.659524
94 2007-11-01 218116.790000 417490.770000 7.795471e+05 250108.611905
95 2007-12-01 252394.114286 438542.793333 7.688869e+05 253659.528571
96 2008-01-01 213645.390000 403266.740000 7.976689e+05 252508.333333
97 2008-02-01 215873.670000 407735.550000 7.940002e+05 241978.083333
98 2008-03-01 233761.070000 424157.280000 7.760268e+05 247679.038095
99 2008-04-01 233687.280000 399193.530000 8.077258e+05 243178.030952
100 2008-05-01 236635.850000 390882.630000 6.823262e+05 240798.459524
101 2008-06-01 200656.570000 337464.320000 5.076627e+05 242422.571429
102 2008-07-01 228640.210000 374847.050000 5.443993e+05 243531.971429
103 2008-08-01 227499.000000 378363.760000 5.561744e+05 237062.519048
104 2008-09-01 218214.640000 367962.730000 5.578026e+05 225262.458571
105 2008-10-01 238955.440000 386430.400000 6.178631e+05 263100.502381
106 2008-11-01 238626.160000 375438.690000 6.881041e+05 230092.621429
107 2008-12-01 298245.470000 463343.730000 7.789538e+05 245852.645238
108 2009-01-01 273494.160000 424264.500000 8.005265e+05 217372.416667
109 2009-02-01 254667.700000 424438.710000 7.950505e+05 212038.241928
110 2009-03-01 290343.280000 434248.690000 8.659816e+05 235475.316667
111 2009-04-01 290887.080000 454265.400000 8.221097e+05 209739.173810
112 2009-05-01 276970.670000 432401.490000 7.706873e+05 221884.466190
113 2009-06-01 252551.990000 393140.380000 7.038155e+05 221329.626190
114 2009-07-01 283142.050000 435256.090000 7.408681e+05 241510.204762
115 2009-08-01 267830.840000 409182.960000 6.923767e+05 232174.109524
116 2009-09-01 248994.420000 420238.710000 6.874351e+05 225886.426190
117 2009-10-01 269008.520000 421753.290000 7.757396e+05 235899.133333
118 2009-11-01 212149.905000 391754.810000 7.386786e+05 232172.833333
119 2009-12-01 296805.290000 449842.290000 8.916704e+05 215923.378571
120 2010-01-01 243341.490000 389068.410000 7.777413e+05 228078.623810
121 2010-02-01 248207.930000 391195.690000 8.076921e+05 214409.685714
122 2010-03-01 320985.410000 465664.590000 1.017058e+06 242081.585714
123 2010-04-01 254872.610000 387063.180000 7.627700e+05 216150.666667
124 2010-05-01 238903.310000 381811.180000 7.216682e+05 215523.538095
125 2010-06-01 251896.390000 385981.100000 6.832365e+05 226415.073810
126 2010-07-01 278700.490000 422481.800000 7.215846e+05 243063.350000
127 2010-08-01 268917.790000 410176.390000 6.957963e+05 245908.416667
128 2010-09-01 266975.250000 396429.750000 6.875539e+05 233404.895238
129 2010-10-01 275031.210000 418305.070000 7.454155e+05 236852.345238
130 2010-11-01 273452.940000 409652.730000 7.859174e+05 255841.845238
131 2010-12-01 320807.170000 466766.780000 8.437620e+05 251825.204762
132 2011-01-01 285089.040000 411737.330000 8.506968e+05 244328.914286
133 2011-02-01 269301.380000 391131.100000 8.199405e+05 228478.995238
134 2011-03-01 281453.750000 393160.910000 9.004859e+05 255792.916667
135 2011-04-01 285598.370000 386749.270000 7.975272e+05 237582.676190
136 2011-05-01 253277.880000 371876.750000 8.038495e+05 247975.276190
137 2011-06-01 290137.490000 380800.430000 7.296768e+05 247082.276190
138 2011-07-01 279283.360000 389294.640000 7.182551e+05 259033.888095
139 2011-08-01 256380.270000 408494.510000 6.997361e+05 259688.742857
140 2011-09-01 256728.250000 380453.230000 6.603849e+05 251882.535714
141 2011-10-01 242071.010000 381309.500000 6.722149e+05 262255.138095
142 2011-11-01 231413.830000 381871.840000 7.945072e+05 252218.214286
143 2011-12-01 291678.030000 449904.100000 8.623188e+05 263892.433333
144 2012-01-01 261933.680000 393781.940000 8.149567e+05 242524.898571
145 2012-02-01 253733.220000 402633.550000 8.480672e+05 243810.952381
146 2012-03-01 290286.650000 429534.500000 9.250653e+05 270906.083810
147 2012-04-01 262615.280000 389264.020000 7.922017e+05 249493.658571
148 2012-05-01 235374.040000 405877.410000 7.715425e+05 261657.406667
149 2012-06-01 261012.580000 409111.240000 7.124649e+05 255333.426190
150 2012-07-01 233061.350000 420370.600000 6.991300e+05 271101.936190
151 2012-08-01 259165.940000 433828.020000 7.167204e+05 280184.268571
152 2012-09-01 228205.770000 378478.800000 6.321204e+05 268875.095238
153 2012-10-01 261347.220000 414523.220000 7.284149e+05 297829.174048
154 2012-11-01 272657.820000 394751.470000 8.125234e+05 303422.012381
155 2012-12-01 310407.040000 442191.430000 8.482629e+05 281757.561905
156 2013-01-01 287985.590000 408557.450000 8.637694e+05 291843.997619
157 2013-02-01 259659.660000 361215.690000 8.088540e+05 253221.892857
158 2013-03-01 313075.450000 413744.860000 8.983522e+05 286869.621429
159 2013-04-01 330070.650000 409238.300000 9.661039e+05 287216.303333
160 2013-05-01 313131.360000 403354.790000 8.276012e+05 301770.525476
161 2013-06-01 287596.640000 402012.070000 7.751871e+05 275921.369048
162 2013-07-01 314185.610000 425154.220000 7.325445e+05 292790.104762
163 2013-08-01 288400.670000 416968.150000 7.731479e+05 282844.319048
164 2013-09-01 249357.420000 379479.780000 6.721252e+05 278403.420238
165 2013-10-01 314518.720000 430179.690000 8.000491e+05 285195.011905
166 2013-11-01 306638.450000 404692.460000 8.214575e+05 253022.225476
167 2013-12-01 339969.850000 448135.350000 8.603519e+05 282335.469524
168 2014-01-01 312139.770000 412617.930000 9.172515e+05 288260.804286
169 2014-02-01 312142.650000 385430.580000 8.903623e+05 304312.128571
170 2014-03-01 335869.630000 434863.960000 1.004937e+06 284201.430952
171 2014-04-01 349155.300000 437470.070000 9.720394e+05 250902.831190
172 2014-05-01 332737.370000 427487.200000 8.772633e+05 305911.840476
173 2014-06-01 303016.820000 387299.100000 7.335087e+05 285640.435714
174 2014-07-01 344659.640000 439137.130000 8.269188e+05 289827.598571
175 2014-08-01 326356.060000 442953.100000 7.936940e+05 272617.597143
176 2014-09-01 371327.130000 411466.280000 7.284988e+05 271079.594762
177 2014-10-01 343812.670000 459922.480000 8.362781e+05 337006.144524
178 2014-11-01 343918.560000 436467.900000 8.857137e+05 303666.704286
179 2014-12-01 464223.150000 538899.260000 1.021378e+06 311419.960476
180 2015-01-01 419102.720000 503135.700000 1.014706e+06 317220.912857
181 2015-02-01 398167.690000 454190.880000 9.801498e+05 315364.363333
182 2015-03-01 457246.140000 521879.260000 1.142551e+06 338142.317143
183 2015-04-01 413451.110000 486779.410000 1.011168e+06 320920.883810
184 2015-05-01 415570.950000 483594.830000 9.443167e+05 328177.803810
185 2015-06-01 414466.180000 480892.110000 8.800165e+05 331140.045714
186 2015-07-01 440729.530000 515322.660000 9.025864e+05 363251.960000
187 2015-08-01 439588.900000 513413.000000 8.877968e+05 333215.607143
188 2015-09-01 422826.585476 501658.043333 7.346542e+05 364351.758095
189 2015-10-01 448971.880000 532741.140000 8.342859e+05 364469.545714
190 2015-11-01 423841.820000 516486.950000 9.254310e+05 353643.078571
191 2015-12-01 499839.170000 600161.720000 1.047479e+06 355233.649048
192 2016-01-01 433180.340000 545737.530000 1.084044e+06 346512.219048
193 2016-02-01 450916.350000 540459.190000 1.055673e+06 368867.548095
194 2016-03-01 486255.940000 575720.920000 1.107297e+06 372223.424048
195 2016-04-01 467472.200000 545605.470000 1.149175e+06 357084.223333
196 2016-05-01 468710.380000 551000.790000 1.019984e+06 377629.016905
197 2016-06-01 450758.180000 537583.250000 8.885381e+05 355848.993333
198 2016-07-01 465270.480000 562778.840000 8.837160e+05 350429.766667
199 2016-08-01 485995.830000 585748.500000 8.662700e+05 363859.513095
200 2016-09-01 456946.750000 548491.650000 8.778006e+05 356426.233571
201 2016-10-01 476277.640000 573754.730000 9.164107e+05 373503.775714
202 2016-11-01 463726.210000 547323.530000 1.019672e+06 372904.634286
203 2016-12-01 524242.310000 615251.510000 1.113827e+06 372690.455714
204 2017-01-01 477291.930000 546212.160000 1.079339e+06 358706.818571
205 2017-02-01 453665.320000 526888.940000 1.052536e+06 357497.970229
206 2017-03-01 523943.600000 592249.340000 1.216423e+06 351791.925033
207 2017-04-01 500063.030000 530345.960000 1.032813e+06 360957.704524
208 2017-05-01 516884.370000 588861.620000 1.034806e+06 377492.160714
209 2017-06-01 478491.950000 549378.050000 8.975119e+05 378328.463810
210 2017-07-01 521730.410000 607702.700000 9.388876e+05 369948.637476
211 2017-08-01 514086.570000 604650.340000 9.501881e+05 385834.284762
212 2017-09-01 492618.550000 560892.670000 8.943636e+05 447373.592143
213 2017-10-01 512762.320000 583658.830000 9.359862e+05 393901.921429
214 2017-11-01 510631.290000 563345.610000 1.038598e+06 409332.858095
215 2017-12-01 574097.700000 635423.760000 1.117711e+06 404574.361905
216 2018-01-01 528763.300000 581802.980000 1.105629e+06 421848.920476
217 2018-02-01 502041.670000 545210.000000 1.072072e+06 379239.067143
218 2018-03-01 571052.130000 618402.180000 1.194136e+06 415125.896429
219 2018-04-01 526979.670000 565665.720000 1.108453e+06 370434.605238
220 2018-05-01 544395.170000 570129.660000 1.009750e+06 403094.744048
221 2018-06-01 518911.440000 554431.500000 9.300650e+05 390070.171667
222 2018-07-01 541811.120000 589775.970000 9.503435e+05 381128.075238
223 2018-08-01 570224.107000 593659.630000 9.918181e+05 407124.746190
224 2018-09-01 531285.291000 551547.830000 8.823035e+05 385717.790714
225 2018-10-01 573751.472000 579474.430000 9.690950e+05 408674.336524
226 2018-11-01 563417.572000 573687.350000 1.061942e+06 408049.579000
227 2018-12-01 632670.174000 654281.250000 1.106130e+06 421872.087524
228 2019-01-01 596682.750000 601714.900000 1.152950e+06 421555.410000
229 2019-02-01 559109.220000 565425.020000 1.103358e+06 402371.330000
230 2019-03-01 645266.770000 610720.580000 1.228025e+06 428149.450000
231 2019-04-01 657570.180000 598956.300000 1.160125e+06 414018.680000
232 2019-05-01 666748.630000 611592.320000 1.134666e+06 426587.330000
233 2019-06-01 641136.560000 595744.380000 1.012030e+06 399031.610000
234 2019-07-01 650150.780000 615559.330000 1.030650e+06 419958.020000
235 2019-08-01 668783.390000 632415.700000 1.070198e+06 419493.820000
236 2019-09-01 616079.300000 587861.840000 9.733584e+05 396860.640000
237 2019-10-01 669008.770000 643044.330000 1.043630e+06 433917.150000
238 2019-11-01 643070.350000 620572.210000 1.122735e+06 430725.890000
239 2019-12-01 706020.770000 682468.140000 1.175725e+06 428697.640000
240 2020-01-01 640011.730000 622323.790000 1.184419e+06 421644.720000
241 2020-02-01 652028.000000 633100.050000 1.233250e+06 426533.150000
242 2020-03-01 573586.730000 509752.950000 1.100814e+06 420637.140000
243 2020-04-01 458420.850000 391773.230000 8.675923e+05 345933.610000
244 2020-05-01 478771.830000 407482.520000 8.287439e+05 362987.370000
245 2020-06-01 516933.600000 388952.810000 7.823280e+05 402541.020000
246 2020-07-01 567052.500000 462380.810000 8.703549e+05 423328.220000
247 2020-08-01 647375.580000 574379.330000 8.852007e+05 483695.900000
248 2020-09-01 661665.580000 610445.100000 9.590133e+05 439581.360000
249 2020-10-01 680362.070000 648582.820000 1.064005e+06 459312.450000
250 2020-11-01 652630.160000 639856.620000 1.072873e+06 421504.590000
251 2020-12-01 768193.030000 760695.450000 1.276291e+06 481068.860000
252 2021-01-01 685942.970000 655512.660000 1.220638e+06 485759.130000
253 2021-02-01 669312.880000 621712.090000 1.272609e+06 447847.050000
254 2021-03-01 773453.520000 692240.490000 1.417380e+06 513966.390000
255 2021-04-01 688389.030000 610310.750000 1.268491e+06 466275.270000
256 2021-05-01 707336.380000 643076.840000 1.188223e+06 475018.360000
257 2021-06-01 692598.710000 637332.810000 1.128077e+06 475462.790000
258 2021-07-01 740193.130000 665472.940000 1.197398e+06 500478.600000
259 2021-08-01 668221.540000 636824.610000 1.104626e+06 492629.810000
260 2021-09-01 670418.800000 605257.760000 1.102655e+06 493058.470000
261 2021-10-01 718676.320000 675821.540000 1.166983e+06 497279.700000
262 2021-11-01 708246.270000 641916.400000 1.223817e+06 480432.290000
263 2021-12-01 821882.150000 768102.830000 1.380065e+06 531775.930000
264 2022-01-01 683031.840000 621512.780000 1.281083e+06 513015.930000
265 2022-02-01 661521.580000 592106.140000 1.267195e+06 519921.040000
266 2022-03-01 701819.650000 598038.470000 1.335368e+06 483657.430000
267 2022-04-01 812059.060000 569199.430000 1.288233e+06 493178.400000
268 2022-05-01 791824.980000 483991.630000 1.109577e+06 515616.020000
269 2022-06-01 781009.470000 507260.420000 1.102689e+06 513914.270000
270 2022-07-01 788841.460000 554496.900000 1.125984e+06 513619.250000
271 2022-08-01 784468.320000 581844.420000 1.107349e+06 541273.940000
272 2022-09-01 760396.150000 570632.200000 1.202883e+06 479529.680000
273 2022-10-01 768784.360000 573943.480000 9.792433e+05 545823.450000
274 2022-11-01 771173.120000 572163.230000 1.165294e+06 528393.770000
275 2022-12-01 865851.440000 635953.460000 1.241282e+06 556737.220000
276 2023-01-01 804524.730000 599501.290000 1.285933e+06 574148.000000
277 2023-02-01 737345.640000 544144.000000 1.226885e+06 497273.190000
278 2023-03-01 875010.340000 656941.640000 1.463008e+06 588892.160000
279 2023-04-01 798128.360000 586642.200000 1.247899e+06 513919.890000
280 2023-05-01 866826.790000 646221.200000 1.346554e+06 561767.170000
281 2023-06-01 782745.170000 616290.210000 1.159046e+06 532138.900000
282 2023-07-01 825219.050000 642098.160000 1.178454e+06 521833.560000
283 2023-08-01 851754.020000 632333.400000 1.222453e+06 543825.640000
284 2023-09-01 799852.730000 597670.260000 1.103622e+06 517699.480000
285 2023-10-01 728741.160000 531542.580000 9.981134e+05 495261.140000
286 2023-11-01 807947.980000 632180.030000 1.248224e+06 530542.420000
287 2023-12-01 880233.120000 691389.620000 1.334692e+06 541263.180000
288 2024-01-01 830708.130000 658083.660000 1.359012e+06 548124.450000
289 2024-02-01 818740.160000 654059.600000 1.340174e+06 526897.850000
290 2024-03-01 870771.700000 671997.050000 1.393325e+06 523990.910000
291 2024-04-01 847353.150000 633520.570000 1.428143e+06 531880.190000
292 2024-05-01 894533.140000 692427.940000 1.401052e+06 536754.380000
In [ ]:
#report = sv.analyze(dataConsumo)
#report.show_html('Consumo/EDAConsumo.html') 

📚Dataset: IMPORTACION-VOLUMEN-2024-05.xlsx¶

Este dataset cuenta con una estructura similar a la de datos de consumo, por lo que tambien se combinan las columnas de diesel.

In [ ]:
csvPath = 'Importacion/IMPORTACION-VOLUMEN-2024-05.csv'

dataImportacion = combineDieselColumns(csvPath)
📂 Iniciando la combinación de las columnas de Diesel...
✅ Archivo cargado: Importacion/IMPORTACION-VOLUMEN-2024-05.csv
🏁 Combinación de columnas completada.
In [ ]:
dataImportacion = dataImportacion[['Fecha', 'Gasolina regular', 'Gasolina superior', 'Diesel', 'Gas licuado de petróleo']]
dataImportacion['Fecha'] = pd.to_datetime(dataImportacion['Fecha'])
dataImportacion.head()
Out[ ]:
Fecha Gasolina regular Gasolina superior Diesel Gas licuado de petróleo
0 2001-01-01 177776.50 373963.96 566101.99 194065.738095
1 2001-02-01 123115.99 243091.07 489525.8 170703.380952
2 2001-03-01 161726.42 312084.38 575559.68 161837.371429
3 2001-04-01 127338.74 285054.89 437745.42 163048.642857
4 2001-05-01 168730.19 300913.67 552609.13 171518.861905

En este EDA se destaca que en el dataset de Importación, similarmente al dataset de Consumo, todas las variables cuentan con distribuciones asimétricas positivas, aunque algunas cuentan con una menor asimetría. Los gráficos de caja y bigotes indican la presencia de valores atipicos principalmente en Gasolina superior y Gas licuado de petróleo. Al igual que el dataset anterior, los Q-Q plots muestran que ninguna de las variables cuenta con una distribución normal.

In [ ]:
csvPath = 'Importacion/dataImportacion.csv'
dataImportacion.to_csv(csvPath, index=False)
AV = AutoViz_Class()
AV.AutoViz(csvPath)
Shape of your Data Set loaded: (281, 5)
#######################################################################################
######################## C L A S S I F Y I N G  V A R I A B L E S  ####################
#######################################################################################
Classifying variables in data set...
    Number of Numeric Columns =  4
    Number of Integer-Categorical Columns =  0
    Number of String-Categorical Columns =  0
    Number of Factor-Categorical Columns =  0
    Number of String-Boolean Columns =  0
    Number of Numeric-Boolean Columns =  0
    Number of Discrete String Columns =  0
    Number of NLP String Columns =  0
    Number of Date Time Columns =  0
    Number of ID Columns =  1
    Number of Columns to Delete =  0
    5 Predictors classified...
        1 variable(s) removed since they were ID or low-information variables
        List of variables removed: ['Fecha']
To fix these data quality issues in the dataset, import FixDQ from autoviz...
    All variables classified into correct types.
  Data Type Missing Values% Unique Values% Minimum Value Maximum Value DQ Issue
Fecha object 0.000000 100 Possible ID column: drop before modeling step.
Gasolina regular float64 0.000000 NA 81015.300000 987872.050000 No issue
Gasolina superior float64 0.000000 NA 170292.500000 1227173.530000 Column has 2 outliers greater than upper bound (939346.60) or lower than lower bound(23410.12). Cap them or remove them.
Diesel float64 0.000000 NA 229764.740000 1595698.560000 No issue
Gas licuado de petróleo float64 0.000000 NA 100561.466667 1077122.750000 Column has 1 outliers greater than upper bound (1076259.26) or lower than lower bound(-285424.28). Cap them or remove them.
Number of All Scatter Plots = 10
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
All Plots done
Time to run AutoViz = 1 seconds 

 ###################### AUTO VISUALIZATION Completed ########################
Out[ ]:
Fecha Gasolina regular Gasolina superior Diesel Gas licuado de petróleo
0 2001-01-01 177776.500000 373963.960 566101.990 1.940657e+05
1 2001-02-01 123115.990000 243091.070 489525.800 1.707034e+05
2 2001-03-01 161726.420000 312084.380 575559.680 1.618374e+05
3 2001-04-01 127338.740000 285054.890 437745.420 1.630486e+05
4 2001-05-01 168730.190000 300913.670 552609.130 1.715189e+05
5 2001-06-01 152899.090000 333217.190 497855.260 1.900044e+05
6 2001-07-01 136299.130000 195071.860 302350.020 2.060228e+05
7 2001-08-01 139365.070000 268153.260 464159.130 1.005615e+05
8 2001-09-01 233643.750000 308439.070 321952.940 1.868390e+05
9 2001-10-01 141550.220000 305102.280 438989.550 1.638642e+05
10 2001-11-01 165841.460000 256638.190 440245.350 1.947225e+05
11 2001-12-01 149217.670000 277145.050 479983.270 1.943290e+05
12 2002-01-01 178585.930000 271479.000 500041.320 1.684226e+05
13 2002-02-01 144447.250000 365657.750 686923.830 2.001414e+05
14 2002-03-01 104673.640000 246292.600 432538.460 1.934226e+05
15 2002-04-01 190339.000000 310256.300 424667.360 2.182575e+05
16 2002-05-01 194830.100000 363311.760 497781.660 1.592994e+05
17 2002-06-01 137050.800000 250123.190 496826.620 2.108746e+05
18 2002-07-01 222408.000000 428842.800 636727.840 1.997085e+05
19 2002-08-01 143795.000000 298280.330 346225.000 1.922137e+05
20 2002-09-01 156956.900000 331053.700 638933.220 1.906867e+05
21 2002-10-01 195426.800000 352055.500 703749.810 2.108712e+05
22 2002-11-01 153185.700000 291188.760 573289.500 2.275959e+05
23 2002-12-01 167596.710000 440677.810 678749.640 1.922720e+05
24 2003-01-01 228269.500000 425185.500 797344.380 2.375323e+05
25 2003-02-01 214490.700000 443849.850 765912.660 1.698190e+05
26 2003-03-01 161257.480000 363352.660 693942.310 2.210309e+05
27 2003-04-01 189824.893000 335444.690 873103.096 1.921701e+05
28 2003-05-01 269981.860000 459025.690 625190.080 1.850167e+05
29 2003-06-01 182254.230000 372486.530 671882.830 2.318050e+05
30 2003-07-01 133668.200000 400922.970 822014.550 2.165049e+05
31 2003-08-01 169903.860000 292365.040 494087.130 2.099524e+05
32 2003-09-01 177217.530000 398192.160 614913.680 2.314992e+05
33 2003-10-01 181668.026000 260219.920 433084.990 2.163028e+05
34 2003-11-01 205624.080000 393951.960 627189.780 2.325270e+05
35 2003-12-01 161477.730000 296780.150 745524.880 2.144899e+05
36 2004-01-01 173427.230000 368235.140 762385.450 2.512715e+05
37 2004-02-01 147939.230000 281891.970 460947.500 1.977303e+05
38 2004-03-01 275539.380000 486880.820 772128.260 2.533661e+05
39 2004-04-01 245156.340000 415426.000 809194.950 2.066719e+05
40 2004-05-01 178387.800000 350052.950 634209.640 2.023682e+05
41 2004-06-01 133341.000000 311238.010 461381.790 2.318503e+05
42 2004-07-01 152075.750000 249710.687 467154.310 2.204493e+05
43 2004-08-01 208592.850000 434578.120 669462.530 2.158811e+05
44 2004-09-01 218499.240000 420550.290 714039.850 2.520583e+05
45 2004-10-01 201907.670000 366886.300 655715.050 2.087155e+05
46 2004-11-01 215838.320000 434710.940 726697.880 1.956455e+05
47 2004-12-01 227094.710000 433149.960 781266.610 2.786885e+05
48 2005-01-01 202374.330000 257867.990 663058.790 2.264525e+05
49 2005-02-01 178104.720000 306660.390 683664.390 1.792128e+05
50 2005-03-01 217667.690000 431907.810 778645.070 2.711630e+05
51 2005-04-01 234492.030000 534151.810 708164.740 1.876000e+05
52 2005-05-01 192734.400000 378616.300 875087.620 2.436253e+05
53 2005-06-01 243343.680000 537398.430 1041016.720 2.560014e+05
54 2005-07-01 175946.300000 363410.900 770731.740 3.510896e+05
55 2005-08-01 173810.380000 566618.550 815435.200 1.150986e+05
56 2005-09-01 81015.300000 193484.500 229764.740 4.619572e+05
57 2005-10-01 145325.650000 528877.090 671848.940 4.567143e+05
58 2005-11-01 266018.370000 348687.810 635553.460 1.278198e+05
59 2005-12-01 107374.000000 360807.000 1212610.530 4.564411e+05
60 2006-01-01 348503.850000 711860.770 708730.840 4.619158e+05
61 2006-02-01 145048.200000 262170.900 767710.630 1.393182e+05
62 2006-03-01 285783.250000 408065.340 744721.940 3.852874e+05
63 2006-04-01 238824.610000 421300.820 935306.580 3.177561e+05
64 2006-05-01 134212.300000 312024.700 822556.450 1.345260e+05
65 2006-06-01 211562.740000 394014.850 361207.590 3.475493e+05
66 2006-07-01 180942.180000 375951.160 971716.720 1.400744e+05
67 2006-08-01 147245.490000 313326.860 603747.330 4.340132e+05
68 2006-09-01 366193.770000 525623.150 473431.310 4.576832e+05
69 2006-10-01 153997.350000 285505.000 1220719.640 1.309387e+05
70 2006-11-01 171327.010000 428590.500 431874.860 4.920634e+05
71 2006-12-01 234319.300000 395132.090 890336.680 1.129128e+05
72 2007-01-01 289550.590000 523730.310 818060.570 3.083485e+05
73 2007-02-01 299077.040000 401855.410 822325.650 2.950828e+05
74 2007-03-01 326317.750000 541817.850 569451.850 3.993872e+05
75 2007-04-01 94844.900000 203441.330 850138.110 3.917908e+05
76 2007-05-01 238404.830000 545587.630 793887.040 1.321066e+05
77 2007-06-01 170064.980000 441537.390 855757.140 5.532520e+05
78 2007-07-01 227660.470000 451180.820 1118432.250 1.531678e+05
79 2007-08-01 351306.270000 501840.270 824047.470 3.096471e+05
80 2007-09-01 181015.830000 336120.810 497008.840 1.834849e+05
81 2007-10-01 312120.180000 376377.750 885924.860 4.861949e+05
82 2007-11-01 289282.550000 512550.510 665114.830 1.486274e+05
83 2007-12-01 222108.350000 542916.970 812776.590 3.710984e+05
84 2008-01-01 107885.650000 204788.300 613819.330 5.226705e+05
85 2008-02-01 234830.100000 545139.830 500922.230 1.269412e+05
86 2008-03-01 241800.330000 405713.480 1095743.350 3.212948e+05
87 2008-04-01 271554.270000 570256.980 682042.070 2.965320e+05
88 2008-05-01 242628.160000 424954.880 710464.760 5.065898e+05
89 2008-06-01 177838.700000 273398.730 817804.840 1.356305e+05
90 2008-07-01 232129.200000 384549.700 541486.150 3.651176e+05
91 2008-08-01 138376.720000 241881.470 713650.520 1.249092e+05
92 2008-09-01 290621.260000 423244.170 544521.540 2.903307e+05
93 2008-10-01 358036.440000 329762.300 344273.020 5.158331e+05
94 2008-11-01 170365.320000 386365.050 809439.420 3.047807e+05
95 2008-12-01 238398.920000 458949.420 524038.420 2.658542e+05
96 2009-01-01 202484.534762 382300.560 941535.710 4.408072e+05
97 2009-02-01 588346.360000 522820.810 914059.400 3.088982e+05
98 2009-03-01 298459.250000 626630.990 893473.800 1.163574e+05
99 2009-04-01 182218.960000 348267.660 816840.020 3.827966e+05
100 2009-05-01 377337.480000 341700.480 621339.930 1.080326e+05
101 2009-06-01 363676.290000 589337.790 735260.510 4.399545e+05
102 2009-07-01 363911.510000 337172.650 850806.890 4.518928e+05
103 2009-08-01 210495.680000 476525.360 842742.170 1.511795e+05
104 2009-09-01 161783.680000 321728.950 611966.220 2.655124e+05
105 2009-10-01 375067.230000 639524.610 869366.310 2.942996e+05
106 2009-11-01 201213.100000 321859.440 894309.880 5.434985e+05
107 2009-12-01 291525.480000 435416.180 1144960.660 1.212566e+05
108 2010-01-01 173918.350000 318949.720 905803.650 4.370423e+05
109 2010-02-01 336005.720000 492452.550 447271.920 4.108464e+05
110 2010-03-01 157798.770000 303762.940 947702.880 1.484954e+05
111 2010-04-01 433108.230000 562996.070 613011.210 4.100011e+05
112 2010-05-01 279926.950000 429729.380 1086036.160 2.305846e+05
113 2010-06-01 281834.460000 464310.800 587828.260 3.446831e+05
114 2010-07-01 241994.240000 456588.390 712889.930 4.619780e+05
115 2010-08-01 282509.240000 475714.120 637252.290 2.361643e+05
116 2010-09-01 208796.020000 321134.560 741721.420 1.443818e+05
117 2010-10-01 392100.620000 493794.290 630692.560 3.284726e+05
118 2010-11-01 139547.730000 241062.760 565627.540 5.406719e+05
119 2010-12-01 430857.950000 652210.770 1135293.920 2.865017e+05
120 2011-01-01 253700.820000 391997.540 1033948.690 5.115181e+05
121 2011-02-01 343582.850000 437769.480 772775.580 3.138772e+05
122 2011-03-01 291087.160000 445920.270 707536.310 2.971903e+05
123 2011-04-01 326003.710000 357349.670 767445.360 4.263802e+05
124 2011-05-01 326566.610000 433038.130 918940.440 2.383741e+05
125 2011-06-01 230990.130000 354604.940 553883.420 3.451963e+05
126 2011-07-01 188581.400000 369694.760 734958.540 1.489885e+05
127 2011-08-01 201844.490000 270765.310 1014324.280 5.656279e+05
128 2011-09-01 260669.220000 335803.820 795554.710 3.823104e+05
129 2011-10-01 239711.910000 351555.660 612133.260 3.190910e+05
130 2011-11-01 237803.480000 450212.800 575406.480 3.843684e+05
131 2011-12-01 367820.540000 534925.360 732921.030 1.410525e+05
132 2012-01-01 318283.440000 434648.170 790123.230 4.817815e+05
133 2012-02-01 253583.960000 372893.490 887963.980 1.625613e+05
134 2012-03-01 255492.160000 354160.850 978693.290 5.214937e+05
135 2012-04-01 189948.790000 399701.690 697871.280 1.319584e+05
136 2012-05-01 241786.290000 380531.850 833370.090 5.105068e+05
137 2012-06-01 320566.690000 550379.330 767124.650 5.276723e+05
138 2012-07-01 142232.470000 271509.200 1021995.900 1.654242e+05
139 2012-08-01 263677.230000 361307.200 626706.230 3.878921e+05
140 2012-09-01 201347.560000 372989.290 619651.270 5.308978e+05
141 2012-10-01 374301.510000 600094.030 463054.770 1.622084e+05
142 2012-11-01 197398.800000 359818.540 538552.890 5.693459e+05
143 2012-12-01 287980.580000 419029.170 1324780.960 1.529268e+05
144 2013-01-01 396416.840000 433924.690 749266.680 5.753185e+05
145 2013-02-01 235502.580000 470483.980 709843.020 1.427728e+05
146 2013-03-01 439386.620000 429974.170 832627.570 5.690132e+05
147 2013-04-01 274680.650000 430259.180 860094.780 5.086495e+05
148 2013-05-01 281823.200000 532379.660 1202187.850 1.814616e+05
149 2013-06-01 293808.600000 284038.030 729711.880 5.368472e+05
150 2013-07-01 259025.830000 486075.060 693160.500 3.529090e+05
151 2013-08-01 221433.200000 347066.110 505133.440 3.593460e+05
152 2013-09-01 300794.990000 373303.310 803626.980 3.949859e+05
153 2013-10-01 281168.850000 372946.330 980327.980 4.158693e+05
154 2013-11-01 390941.150000 496029.720 903218.470 4.256692e+05
155 2013-12-01 210096.780000 358799.640 791698.890 4.524141e+05
156 2014-01-01 487880.790000 457365.460 1595698.560 3.718887e+05
157 2014-02-01 312423.860000 455726.060 688703.180 3.368452e+05
158 2014-03-01 472437.630000 582572.930 1147182.500 3.587558e+05
159 2014-04-01 207049.000000 270302.220 845051.330 4.667670e+05
160 2014-05-01 417767.240000 563319.790 1008148.070 5.547843e+05
161 2014-06-01 247114.990000 404603.550 694920.680 3.591356e+05
162 2014-07-01 454196.130000 558403.410 845875.860 4.175703e+05
163 2014-08-01 305285.530000 398563.480 760353.370 4.160683e+05
164 2014-09-01 378741.560000 547486.220 598145.890 4.089989e+05
165 2014-10-01 256340.490000 379572.070 762763.240 3.148689e+05
166 2014-11-01 372809.930000 533524.400 1033873.160 4.873437e+05
167 2014-12-01 491072.110000 583081.570 1004032.650 3.801860e+05
168 2015-01-01 371420.590000 471973.300 1324421.960 5.233523e+05
169 2015-02-01 548714.530000 664315.850 955286.020 4.212682e+05
170 2015-03-01 453536.190000 622883.100 1164885.970 4.971686e+05
171 2015-04-01 537064.590000 599558.550 1130870.790 5.196038e+05
172 2015-05-01 534049.280000 618319.210 954782.750 4.158903e+05
173 2015-06-01 394824.330000 525280.850 862071.770 5.263585e+05
174 2015-07-01 519374.150000 616269.010 1149630.430 4.119714e+05
175 2015-08-01 328552.070000 467373.130 919285.900 5.615638e+05
176 2015-09-01 485906.490000 576250.290 754068.770 4.802689e+05
177 2015-10-01 432666.750000 533620.640 1163425.950 4.232394e+05
178 2015-11-01 574547.760000 724273.970 904700.420 6.373165e+05
179 2015-12-01 319329.710000 498798.790 1113876.280 5.006843e+05
180 2016-01-01 546876.540000 729211.430 987507.780 7.489706e+05
181 2016-02-01 424074.810000 405559.450 1167227.960 2.873377e+05
182 2016-03-01 508542.180000 771024.110 1498844.950 5.044511e+05
183 2016-04-01 527083.640000 502728.880 1137213.100 5.874827e+05
184 2016-05-01 528347.810000 615900.310 1035544.080 4.169125e+05
185 2016-06-01 397477.400000 502082.450 800222.530 7.033192e+05
186 2016-07-01 526652.730000 618366.100 859222.620 4.558231e+05
187 2016-08-01 512202.570000 625218.900 701185.750 5.883105e+05
188 2016-09-01 567786.570000 677892.970 1274128.310 3.065434e+05
189 2016-10-01 455850.760000 546154.650 927923.500 7.173886e+05
190 2016-11-01 476784.160000 725548.160 957656.050 5.059760e+05
191 2016-12-01 473659.590000 526573.960 1303735.780 5.848072e+05
192 2017-01-01 527564.900000 748233.580 842993.490 5.673458e+05
193 2017-02-01 469140.060000 497707.410 844676.980 2.795272e+05
194 2017-03-01 608144.980000 734984.240 1351787.920 7.800486e+05
195 2017-04-01 681303.110000 632843.410 1406022.430 5.305781e+05
196 2017-05-01 386088.180000 442311.090 889926.860 6.047026e+05
197 2017-06-01 519389.660000 582374.340 902659.000 4.872442e+05
198 2017-07-01 433026.080000 769214.060 994338.300 5.104281e+05
199 2017-08-01 592103.310000 607368.720 846696.350 5.385821e+05
200 2017-09-01 316435.220000 401678.980 925397.870 3.502946e+05
201 2017-10-01 574073.610000 657241.760 740198.570 5.847096e+05
202 2017-11-01 434963.360000 504247.310 1135350.100 9.359865e+05
203 2017-12-01 679441.470000 803216.880 1305047.550 5.954214e+05
204 2018-01-01 571858.060000 535784.700 1153831.890 3.963630e+05
205 2018-02-01 509366.100000 629467.910 921684.120 5.910000e+05
206 2018-03-01 563899.060000 529507.150 889227.100 6.442454e+05
207 2018-04-01 510830.000000 617512.280 696962.770 1.885908e+05
208 2018-05-01 580825.110000 580329.350 1592580.340 6.362341e+05
209 2018-06-01 463620.610000 558257.590 777679.910 6.188113e+05
210 2018-07-01 543333.770000 784601.770 793683.410 5.843861e+05
211 2018-08-01 663834.040000 541557.340 1281364.780 4.086586e+05
212 2018-09-01 454442.870000 536897.090 896266.430 4.498468e+05
213 2018-10-01 726044.350000 663440.340 992682.040 6.002305e+05
214 2018-11-01 534084.490000 509382.860 899588.340 5.986262e+05
215 2018-12-01 535639.970000 631652.560 792198.660 6.148870e+05
216 2019-01-01 702923.370000 684504.840 1195728.200 4.140861e+05
217 2019-02-01 469437.280000 521555.380 1208476.160 4.605188e+05
218 2019-03-01 678145.380000 704276.530 1550052.840 3.844256e+05
219 2019-04-01 867761.340000 656495.950 1215209.050 6.706339e+05
220 2019-05-01 596798.220000 568128.410 1011872.870 6.234662e+05
221 2019-06-01 712731.800000 629788.430 1029100.900 6.127323e+05
222 2019-07-01 531577.640000 516273.850 1056569.110 6.674868e+05
223 2019-08-01 896841.310000 713859.980 1167556.890 5.864306e+05
224 2019-09-01 518043.680000 491194.710 717490.020 8.507782e+05
225 2019-10-01 712672.380000 691407.730 1160570.850 2.252070e+05
226 2019-11-01 791039.020000 658706.420 1122990.690 6.108681e+05
227 2019-12-01 731012.240000 797580.750 1098972.390 6.000039e+05
228 2020-01-01 629414.900000 573220.630 999181.200 7.156003e+05
229 2020-02-01 741509.070000 611314.130 1237018.370 4.513317e+05
230 2020-03-01 735491.290000 809640.180 1367335.140 6.432789e+05
231 2020-04-01 329134.180000 453153.090 834366.520 5.103499e+05
232 2020-05-01 415805.820000 170292.500 691066.440 6.163814e+05
233 2020-06-01 683322.720000 415672.190 1066148.050 4.676648e+05
234 2020-07-01 451717.750000 347541.590 779930.570 6.753375e+05
235 2020-08-01 547899.550000 414416.340 791258.190 6.343201e+05
236 2020-09-01 591799.830000 563742.500 1021360.830 3.155271e+05
237 2020-10-01 861840.540000 733692.010 891340.690 9.608405e+05
238 2020-11-01 696600.140000 570262.170 1152909.510 3.286031e+05
239 2020-12-01 780347.280000 777450.550 1050560.830 6.841601e+05
240 2021-01-01 626537.480000 642652.370 1185644.960 4.756195e+05
241 2021-02-01 715261.340000 726508.780 1076824.670 6.177832e+05
242 2021-03-01 772750.010000 850334.640 1345110.180 5.498153e+05
243 2021-04-01 634408.890000 1227173.530 1250171.580 6.644439e+05
244 2021-05-01 669085.780000 649783.140 1279017.240 6.785011e+05
245 2021-06-01 833544.640000 623695.200 1440106.470 4.666585e+05
246 2021-07-01 833732.310000 689717.290 1110409.530 6.652631e+05
247 2021-08-01 664522.740000 685977.450 1175960.640 7.460025e+05
248 2021-09-01 844430.030000 646233.310 896539.240 6.898295e+05
249 2021-10-01 522701.110000 589405.560 1542473.570 6.963469e+05
250 2021-11-01 692267.310000 623392.630 1029780.800 5.241865e+05
251 2021-12-01 785313.560000 640981.150 1294042.310 6.794151e+05
252 2022-01-01 848902.970000 947226.270 1438571.280 6.571857e+05
253 2022-02-01 723925.740000 673653.800 1217495.310 6.732183e+05
254 2022-03-01 772406.100000 592318.210 1246975.120 7.135534e+05
255 2022-04-01 906104.050000 493958.320 1284453.730 6.939644e+05
256 2022-05-01 762776.120000 663348.940 1306786.770 6.672722e+05
257 2022-06-01 641348.460000 556311.960 1032070.530 2.657738e+05
258 2022-07-01 987872.050000 611115.010 1116548.970 7.176527e+05
259 2022-08-01 657942.720000 378627.690 1299910.960 7.352537e+05
260 2022-09-01 869579.640000 551589.720 1077517.900 4.213032e+05
261 2022-10-01 718920.200000 529832.420 980527.080 7.178492e+05
262 2022-11-01 754135.860000 595870.420 1136760.550 6.912374e+05
263 2022-12-01 841323.980000 602458.300 1082107.640 6.714446e+05
264 2023-01-01 909391.130000 578792.140 1442099.080 4.977807e+05
265 2023-02-01 725101.200000 685183.060 1267967.390 6.529847e+05
266 2023-03-01 803262.670000 633849.050 1317519.910 7.119783e+05
267 2023-04-01 922032.390000 572201.360 1417182.730 6.476663e+05
268 2023-05-01 947633.290000 668478.730 1428099.620 7.133490e+05
269 2023-06-01 831466.440000 639685.800 1278824.180 2.858178e+05
270 2023-07-01 830098.860000 562498.090 1113086.840 1.077123e+06
271 2023-08-01 801621.750000 669240.210 1075379.760 2.749736e+05
272 2023-09-01 762592.300000 586145.300 1242719.420 5.917119e+05
273 2023-10-01 928439.180000 652149.450 834686.020 6.735812e+05
274 2023-11-01 839290.020000 682060.840 1348739.160 5.787974e+05
275 2023-12-01 763754.270000 571924.920 1509634.280 6.921820e+05
276 2024-01-01 914133.320000 712333.330 1409097.150 7.015708e+05
277 2024-02-01 740662.250000 650360.110 1236861.750 9.165417e+05
278 2024-03-01 838270.930000 620077.740 1477038.000 6.751575e+05
279 2024-04-01 886132.770000 687017.960 1294706.120 4.739407e+05
280 2024-05-01 939656.180000 696970.300 1470870.090 6.848645e+05

📚Dataset: Precios-Promedio-Nacionales-Diarios-2024-3.xlsx¶

In [ ]:
csvPath = 'PreciosPromedioNacionales/PreciosPromedioNacionales.csv'

dataPrecios = pd.read_csv(csvPath)
print(f"✅ Archivo cargado: {csvPath}")
✅ Archivo cargado: PreciosPromedioNacionales/PreciosPromedioNacionales.csv
In [ ]:
dataPrecios = dataPrecios[['FECHA', 'Regular GTQ/GALON', 'Superior GTQ/GALON', 'Diesel GTQ/GALON', 'Glp Cilindro 25Lbs. GTQ/LB']]
dataPrecios['FECHA'] = pd.to_datetime(dataPrecios['FECHA'])
dataPrecios.head()
Out[ ]:
FECHA Regular GTQ/GALON Superior GTQ/GALON Diesel GTQ/GALON Glp Cilindro 25Lbs. GTQ/LB
0 2021-01-01 21.11 21.91 17.61 3.96
1 2021-01-02 21.11 21.91 17.61 3.96
2 2021-01-03 21.11 21.91 17.61 3.96
3 2021-01-04 21.11 21.91 17.61 3.96
4 2021-01-05 21.11 21.91 17.61 3.96

En este análisis se puede destacar que la mayoría de categorías de combustibles cuentan con distribuciones cercanas a una distribucion normal, con la excepción de Gas Cilindro 25Lbs. Los valores atípicos se aprecian más en esta última que en las otras categorías. Superior, Regular y Diesel tienen rangos intercuartiles similares y más amplios que en comparación de Gas Cilindro 25Lbs.

In [ ]:
csvPath = 'PreciosPromedioNacionales/dataPrecios.csv'
dataPrecios.to_csv(csvPath, index=False)
AV = AutoViz_Class()
AV.AutoViz(csvPath)
Shape of your Data Set loaded: (1305, 5)
#######################################################################################
######################## C L A S S I F Y I N G  V A R I A B L E S  ####################
#######################################################################################
Classifying variables in data set...
    Number of Numeric Columns =  4
    Number of Integer-Categorical Columns =  0
    Number of String-Categorical Columns =  0
    Number of Factor-Categorical Columns =  0
    Number of String-Boolean Columns =  0
    Number of Numeric-Boolean Columns =  0
    Number of Discrete String Columns =  0
    Number of NLP String Columns =  0
    Number of Date Time Columns =  0
    Number of ID Columns =  1
    Number of Columns to Delete =  0
    5 Predictors classified...
        1 variable(s) removed since they were ID or low-information variables
        List of variables removed: ['FECHA']
To fix these data quality issues in the dataset, import FixDQ from autoviz...
    All variables classified into correct types.
  Data Type Missing Values% Unique Values% Minimum Value Maximum Value DQ Issue
FECHA object 0.000000 100 Possible ID column: drop before modeling step.
Regular GTQ/GALON float64 0.000000 NA 21.110000 40.500000 No issue
Superior GTQ/GALON float64 0.000000 NA 21.910000 43.240000 Column has a high correlation with ['Regular GTQ/GALON']. Consider dropping one of them.
Diesel GTQ/GALON float64 0.000000 NA 17.610000 41.270000 Column has a high correlation with ['Regular GTQ/GALON', 'Superior GTQ/GALON']. Consider dropping one of them.
Glp Cilindro 25Lbs. GTQ/LB float64 0.000000 NA 3.960000 5.880000 No issue
Number of All Scatter Plots = 10
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
All Plots done
Time to run AutoViz = 1 seconds 

 ###################### AUTO VISUALIZATION Completed ########################
Out[ ]:
FECHA Regular GTQ/GALON Superior GTQ/GALON Diesel GTQ/GALON Glp Cilindro 25Lbs. GTQ/LB
0 2021-01-01 21.11 21.91 17.61 3.96
1 2021-01-02 21.11 21.91 17.61 3.96
2 2021-01-03 21.11 21.91 17.61 3.96
3 2021-01-04 21.11 21.91 17.61 3.96
4 2021-01-05 21.11 21.91 17.61 3.96
... ... ... ... ... ...
1300 2024-07-24 31.29 32.79 28.09 4.40
1301 2024-07-25 31.29 32.79 28.09 4.40
1302 2024-07-26 31.29 32.79 28.09 4.40
1303 2024-07-27 31.29 32.79 28.09 4.40
1304 2024-07-28 31.29 32.79 28.09 4.40

1305 rows × 5 columns

📚Datasets: Seleccion de series de tiempo.¶

Las tres series seleccionadas fueron:

  • Dataset consumo = 'Diesel'
  • Dataset importación = 'Gasolina regular'
  • Dataset precios = 'Superior GTQ/GALON'
In [ ]:
serieConsumoDiesel = dataConsumo[['Fecha', 'Diesel']]
serieImportacionRegular = dataImportacion[['Fecha', 'Gasolina regular']]
seriePreciosSuper = dataPrecios[['FECHA', 'Superior GTQ/GALON']]

serieConsumoDiesel.set_index('Fecha', inplace=True)
serieConsumoDiesel.sort_index(inplace=True)
serieImportacionRegular.set_index('Fecha', inplace=True)
serieImportacionRegular.sort_index(inplace=True)
seriePreciosSuper.set_index('FECHA', inplace=True)
seriePreciosSuper.sort_index(inplace=True)

📝 Datos iniciales sobre las series.¶

Como se puede observar, se cuenta con tres series de tiempo. Se describen las fechas de inicio y finalización de cada serie, teniendo un abanico de datos que van desde el año 2000 hasta mayo de 2024. Las siglas de frecuencia representan lo siguiente:

  • MS significa "Month Start", lo que indica que los datos para ese dataset son mensuales y se registran al inicio de cada mes.
  • D significa "Daily", lo que indica que los datos se registran diariamente.
In [ ]:
def mostrarInfoSeriesTiempo(consumoDiesel, importacionRegular, preciosSuper):
    print("📊 Información de las series de tiempo:")

    print("\n🔵 Consumo Diesel:")
    print(f"   Inicio: {consumoDiesel.index.min()}")
    print(f"   Fin: {consumoDiesel.index.max()}")
    frecuenciaDiesel = consumoDiesel.index.freq or pd.infer_freq(consumoDiesel.index)
    print(f"   Frecuencia: {frecuenciaDiesel}")

    print("\n🟠 Importación Gasolina Regular:")
    print(f"   Inicio: {importacionRegular.index.min()}")
    print(f"   Fin: {importacionRegular.index.max()}")
    frecuenciaRegular = importacionRegular.index.freq or pd.infer_freq(importacionRegular.index)
    print(f"   Frecuencia: {frecuenciaRegular}")

    print("\n🟢 Precios Super:")
    print(f"   Inicio: {preciosSuper.index.min()}")
    print(f"   Fin: {preciosSuper.index.max()}")
    frecuenciaSuper = preciosSuper.index.freq or pd.infer_freq(preciosSuper.index)
    print(f"   Frecuencia: {frecuenciaSuper}")

# Supongamos que ya tienes las series de tiempo `serieConsumoDiesel`, `serieImportacionRegular` y `seriePreciosSuper`
mostrarInfoSeriesTiempo(serieConsumoDiesel, serieImportacionRegular, seriePreciosSuper)
📊 Información de las series de tiempo:

🔵 Consumo Diesel:
   Inicio: 2000-01-01 00:00:00
   Fin: 2024-05-01 00:00:00
   Frecuencia: MS

🟠 Importación Gasolina Regular:
   Inicio: 2001-01-01 00:00:00
   Fin: 2024-05-01 00:00:00
   Frecuencia: MS

🟢 Precios Super:
   Inicio: 2021-01-01 00:00:00
   Fin: 2024-07-28 00:00:00
   Frecuencia: D

👀 Visualizacion de las series.¶

Para esta parte, se deciden mostrar las series de tiempo para ver un comportamiento inicial. Pero adicionalmente, se genera graficos que permiten observarlas en distintos componentes.

In [ ]:
def plotTimeSeries(consumoDiesel, importacionRegular, preciosSuper):
    print("📈 Iniciando la visualización de series de tiempo...")
    
    # Grafica Consumo Diesel
    plt.figure(figsize=(12, 6))
    print("🔵 Graficando Consumo Diesel...")
    plt.plot(consumoDiesel.index, consumoDiesel['Diesel'], label='Consumo Diesel', color='blue')
    plt.title('Consumo Diesel a lo largo del tiempo')
    plt.xlabel('Fecha')
    plt.ylabel('Consumo')
    plt.legend()
    plt.grid()
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()
    print("✅ Gráfica de Consumo Diesel completada.")

    # Grafica Importación Gasolina Regular
    plt.figure(figsize=(12, 6))
    print("🟠 Graficando Importación Gasolina Regular...")
    plt.plot(importacionRegular.index, importacionRegular['Gasolina regular'], label='Importación Gasolina Regular', color='orange')
    plt.title('Importación Gasolina Regular a lo largo del tiempo')
    plt.xlabel('Fecha')
    plt.ylabel('Importación')
    plt.legend()
    plt.grid()
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()
    print("✅ Gráfica de Importación Gasolina Regular completada.")

    # Grafica Precios Super
    plt.figure(figsize=(12, 6))
    print("🟢 Graficando Precios Super...")
    plt.plot(preciosSuper.index, preciosSuper['Superior GTQ/GALON'], label='Precios Super', color='green')
    plt.title('Precios Super a lo largo del tiempo')
    plt.xlabel('Fecha')
    plt.ylabel('Precio (GTQ/GALON)')
    plt.legend()
    plt.grid()
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()
    print("✅ Gráfica de Precios Super completada.")

plotTimeSeries(serieConsumoDiesel, serieImportacionRegular, seriePreciosSuper)
📈 Iniciando la visualización de series de tiempo...
🔵 Graficando Consumo Diesel...
No description has been provided for this image
✅ Gráfica de Consumo Diesel completada.
🟠 Graficando Importación Gasolina Regular...
No description has been provided for this image
✅ Gráfica de Importación Gasolina Regular completada.
🟢 Graficando Precios Super...
No description has been provided for this image
✅ Gráfica de Precios Super completada.
In [ ]:
def descomponerSerieTiempo(serieTiempo, descripcion):
    print(f"📈 {descripcion}: Iniciando la descomposición de la serie de tiempo... ")
    
    # Descomposición de la serie
    descomposicion = sm.tsa.seasonal_decompose(serieTiempo, model='additive')
    
    # Graficar los componentes
    plt.figure(figsize=(12, 8))
    descomposicion.observed.plot(ax=plt.subplot(411), label='Observado', color='blue')
    plt.legend(loc='upper left')
    
    descomposicion.trend.plot(ax=plt.subplot(412), label='Tendencia', color='orange')
    plt.legend(loc='upper left')

    descomposicion.seasonal.plot(ax=plt.subplot(413), label='Estacionalidad', color='green')
    plt.legend(loc='upper left')

    descomposicion.resid.plot(ax=plt.subplot(414), label='Residuo', color='red')
    plt.legend(loc='upper left')

    plt.tight_layout()
    plt.show()
    
    print("✅ Descomposición completada.")

descomponerSerieTiempo(serieConsumoDiesel['Diesel'], 'Diesel')
descomponerSerieTiempo(serieImportacionRegular['Gasolina regular'], 'Regular')
descomponerSerieTiempo(seriePreciosSuper['Superior GTQ/GALON'], 'Superior')
📈 Diesel: Iniciando la descomposición de la serie de tiempo... 
No description has been provided for this image
✅ Descomposición completada.
📈 Regular: Iniciando la descomposición de la serie de tiempo... 
No description has been provided for this image
✅ Descomposición completada.
📈 Superior: Iniciando la descomposición de la serie de tiempo... 
No description has been provided for this image
✅ Descomposición completada.
  • 🔵 Consumo de diesel: Se puede observar que lo largo del tiempo, cuenta con una tendencia general ascendente con alguna fluctuaciones durante ciertos años como el 2008, 2012, 2016 y 2020. Seguramente este último debido a la pandemia de COVID-19. Además, se puede observar que cuenta con algunos patrones de estacionalidad con variaciones relativamente regulares en ciertos periodos.

  • 🟠 Importacion de gasolina regular: Al igual que la tendencia del diesel, cuenta con una tendencia creciente en el tiempo y con la característica que es más pronunciada a partir de 2008. Respecto a la estacionalidad de la serie, se puede mencionar que existe mayor variabilidad y picos significativos en los mismos años mencionados del diesel. Estas variaciones se pueden atribuir a cambios en politicas de importacion, eventos fuera de lo ordinario como la pandemia, entre otros.

  • 🟢 Precios diarios promedio de super: A diferencia de las últimas dos series, los precios no muestran una tendencia muy clara a largo plazo. Aún asi, cabe desctacar que existen periodos de aumento y disminución significativos. Hablando de la estacinalidad de la serie, no se logra apreciar una estacionalidad clara pero sí es evidente que existen picos y valles notables. Entre 2021 y 2022 se observa que existio un aumento considerable de los precios seguidos de una disminución y varias flucturaciones. Estos cambios siempre se atribuyen a eventos como el COVID-19 o conflictos geopolíticos que afecta la producción y oferta del petróleo.

✍️ Transformaciones¶

Se puede observar que todos los diagramas cuentan con un lento decaimiento y las autocorrelaciones son positivas. Esto nos indica que existe autocorrelación significativa y las series no son estacionarias. Además, analizando la autocorrelacion parcial, se puede observar que existe significancia entre el primer y segundo retardo principalmente.

In [ ]:
def graficarACF_PACF(serieTiempo, descripcion):
    print(f"📈 Gráfico de Autocorrelación y Autocorrelación Parcial para: {descripcion}")
    
    fig, axes = plt.subplots(1, 2, figsize=(16, 6))
    
    plot_acf(serieTiempo, lags=15, alpha=0.2, ax=axes[0])
    axes[0].set_title(f'Autocorrelación de {descripcion}')
    
    plot_pacf(serieTiempo, lags=15, alpha=0.2, ax=axes[1])
    axes[1].set_title(f'Autocorrelación Parcial de {descripcion}')
    
    plt.show()

# Ejemplos de uso:
graficarACF_PACF(serieConsumoDiesel['Diesel'], 'Diesel')
graficarACF_PACF(serieImportacionRegular['Gasolina regular'], 'Regular')
graficarACF_PACF(seriePreciosSuper['Superior GTQ/GALON'], 'Superior')
📈 Gráfico de Autocorrelación y Autocorrelación Parcial para: Diesel
No description has been provided for this image
📈 Gráfico de Autocorrelación y Autocorrelación Parcial para: Regular
No description has been provided for this image
📈 Gráfico de Autocorrelación y Autocorrelación Parcial para: Superior
No description has been provided for this image

De la prueba de Dickey-Fuller Aumentada se puede observar que tanto para diesel y gasolina regular, sus series no son estacionarios debido al p-valor determinado, por lo que se puede considerar realizar aplicar diferenciación antes de aplicar los modelos de series temporales. Por otra parte, respecto a la serie de gasolina superior, pareciera ser estacionaria por lo que se podría modelar directamente sin necesidad de diferenciación.

Las trasnformaciones que podrían ser requeridas serían aplicar diferenciaciones para las series Diesel y Regular o transformaciones logaritmicas para estabilizar varianza. Además, si se quisiera mejorar un poco la serie de Super se podría considerar aplicar alguna transformación para ver si mejora el rendimiento.

In [ ]:
def pruebaDickeyFuller(serieTiempo, descripcion):
    print(f"📊 Prueba de Dickey-Fuller Aumentada para: {descripcion}")
    resultado = adfuller(serieTiempo)
    print(f'Estadístico ADF: {resultado[0]}')
    print(f'p-valor: {resultado[1]}')
    print('Valores críticos:')
    for key, value in resultado[4].items():
        print(f'  {key}: {value}')
    print('-----------------------------------------------------')
    return resultado[1] 

print('-----------------------------------------------------')
pruebaDickeyFuller(serieConsumoDiesel['Diesel'], 'Diesel')
pruebaDickeyFuller(serieImportacionRegular['Gasolina regular'], 'Regular')
pruebaDickeyFuller(seriePreciosSuper['Superior GTQ/GALON'], 'Superior')
-----------------------------------------------------
📊 Prueba de Dickey-Fuller Aumentada para: Diesel
Estadístico ADF: 0.14523982117810716
p-valor: 0.9690175028779467
Valores críticos:
  1%: -3.453922368485787
  5%: -2.871918329081633
  10%: -2.5723001147959184
-----------------------------------------------------
📊 Prueba de Dickey-Fuller Aumentada para: Regular
Estadístico ADF: 0.8288289928204905
p-valor: 0.992087554110633
Valores críticos:
  1%: -3.4547128138328875
  5%: -2.8722649771800155
  10%: -2.5724850011573914
-----------------------------------------------------
📊 Prueba de Dickey-Fuller Aumentada para: Superior
Estadístico ADF: -2.9399220843939617
p-valor: 0.040898674582741115
Valores críticos:
  1%: -3.435401880796999
  5%: -2.863770985550096
  10%: -2.567957791647768
-----------------------------------------------------
Out[ ]:
0.040898674582741115

En esta parte se realizan una serie de funciones que buscan automatizar el proceso de transformación de series para mejorar su rendimiento y evitar la no estacionalidad. Dentro de estas se mencionan la trasnformacion logaritmica y la diferenciación. Cabe destacar que de acuerdo con los resultados anteriores, si no se logra estabilizar tanto en media como en varianza, se decidieron los valores p=1, d=1 y q=1 para ser utilizados en los modelos requeridos.

In [ ]:
def detectar_valores_invalidos(serieTemporal, descripcion):
    serieTemporal = pd.to_numeric(serieTemporal, errors='coerce')  # Convertir a numérico y forzar NaN si hay errores
    n_nan = serieTemporal.isna().sum()
    n_no_positivos = (serieTemporal <= 0).sum()

    print(f"🔍 Detección de valores inválidos en la serie: {descripcion}")
    print(f"  Valores NaN: {n_nan}")
    print(f"  Valores no positivos: {n_no_positivos}")
    
    serieTemporal_sin_nan = serieTemporal.dropna()
    print(f"  Serie temporal sin valores NaN tiene {len(serieTemporal_sin_nan)} elementos.")
    
    return serieTemporal_sin_nan, n_nan, n_no_positivos

def varianza_estable(serieTemporal):
    n = len(serieTemporal)
    partes = np.array_split(serieTemporal, 3)
    varianzas = [np.var(parte) for parte in partes]
    return np.allclose(varianzas[0], varianzas[1], rtol=0.1) and np.allclose(varianzas[1], varianzas[2], rtol=0.1)

def aplicar_transformacion_logaritmica(serieTemporal):
    if (serieTemporal > 0).all():
        return np.log(serieTemporal)
    else:
        print("⚠️ La serie contiene valores no positivos, no se puede aplicar la transformación logarítmica.")
        return serieTemporal

def analizar_y_transformar_serie(serieTemporal, descripcion):
    print(f"🔍 Analizando la serie: {descripcion}")
    
    serieTemporal, n_nan, n_no_positivos = detectar_valores_invalidos(serieTemporal, descripcion)
    
    estacionaria = False
    intentos = 0
    max_intentos = 10

    serieTemporal = aplicar_transformacion_logaritmica(serieTemporal)
    
    while not estacionaria and intentos < max_intentos:
        intentos += 1
        p_valor = pruebaDickeyFuller(serieTemporal, descripcion)
        if p_valor < 0.05:
            if varianza_estable(serieTemporal):
                estacionaria = True
                print(f"✅ La serie {descripcion} es estacionaria en media y varianza.")
                break
            else:
                print(f"❌ La varianza no es estable en la serie {descripcion}.")
        else:
            print(f"❌ La serie {descripcion} no es estacionaria (p-valor: {p_valor}).")
        
        serieTemporal = serieTemporal.diff().dropna()
        print(f"🔄 Aplicando diferenciación a {descripcion}. Intento {intentos}.")
    
    if not estacionaria:
        print(f"⚠️ No se pudo hacer la serie {descripcion} estacionaria después de {max_intentos} intentos.")
        print("📈 Utilizando un modelo ARIMA para tratar con la no estacionariedad.")
        modelo_arima = ARIMA(serieTemporal, order=(1, 1, 1))
        modelo_arima_fit = modelo_arima.fit()
        print(modelo_arima_fit.summary())
    else:
        modelo_arima_fit = None
        
    return serieTemporal, modelo_arima_fit

# Asegúrate de que estas variables estén definidas correctamente
# Reemplaza con tus series temporales reales
serieTemporalD, modelo_arima_diesel = analizar_y_transformar_serie(serieConsumoDiesel['Diesel'], 'Diesel')
# print("--------------------------------------------------------------------------------------------------------")
serieTemporalR, modelo_arima_regular = analizar_y_transformar_serie(serieImportacionRegular['Gasolina regular'], 'Regular')
# print("--------------------------------------------------------------------------------------------------------")
serieTemporalS, modelo_arima_super = analizar_y_transformar_serie(seriePreciosSuper['Superior GTQ/GALON'], 'Superior')
🔍 Analizando la serie: Diesel
🔍 Detección de valores inválidos en la serie: Diesel
  Valores NaN: 0
  Valores no positivos: 0
  Serie temporal sin valores NaN tiene 293 elementos.
Prueba Dickey-Fuller para Diesel: p-valor = 0.901557753919378
❌ La serie Diesel no es estacionaria (p-valor: 0.901557753919378).
🔄 Aplicando diferenciación a Diesel. Intento 1.
Prueba Dickey-Fuller para Diesel: p-valor = 7.851113111171977e-10
❌ La varianza no es estable en la serie Diesel.
🔄 Aplicando diferenciación a Diesel. Intento 2.
Prueba Dickey-Fuller para Diesel: p-valor = 3.1021697475811376e-15
❌ La varianza no es estable en la serie Diesel.
🔄 Aplicando diferenciación a Diesel. Intento 3.
Prueba Dickey-Fuller para Diesel: p-valor = 7.339914914662219e-25
❌ La varianza no es estable en la serie Diesel.
🔄 Aplicando diferenciación a Diesel. Intento 4.
Prueba Dickey-Fuller para Diesel: p-valor = 3.85887345410522e-27
❌ La varianza no es estable en la serie Diesel.
🔄 Aplicando diferenciación a Diesel. Intento 5.
Prueba Dickey-Fuller para Diesel: p-valor = 3.960328765820069e-24
❌ La varianza no es estable en la serie Diesel.
🔄 Aplicando diferenciación a Diesel. Intento 6.
Prueba Dickey-Fuller para Diesel: p-valor = 1.693758290598338e-19
❌ La varianza no es estable en la serie Diesel.
🔄 Aplicando diferenciación a Diesel. Intento 7.
Prueba Dickey-Fuller para Diesel: p-valor = 9.999475164371196e-19
❌ La varianza no es estable en la serie Diesel.
🔄 Aplicando diferenciación a Diesel. Intento 8.
Prueba Dickey-Fuller para Diesel: p-valor = 6.431107622936416e-23
❌ La varianza no es estable en la serie Diesel.
🔄 Aplicando diferenciación a Diesel. Intento 9.
Prueba Dickey-Fuller para Diesel: p-valor = 2.6791261349428788e-28
❌ La varianza no es estable en la serie Diesel.
🔄 Aplicando diferenciación a Diesel. Intento 10.
⚠️ No se pudo hacer la serie Diesel estacionaria después de 10 intentos.
📈 Utilizando un modelo ARIMA para tratar con la no estacionariedad.
                               SARIMAX Results                                
==============================================================================
Dep. Variable:                 Diesel   No. Observations:                  283
Model:                 ARIMA(1, 1, 1)   Log Likelihood               -1078.599
Date:                Sun, 04 Aug 2024   AIC                           2163.197
Time:                        14:50:24   BIC                           2174.123
Sample:                    11-01-2000   HQIC                          2167.578
                         - 05-01-2024                                         
Covariance Type:                  opg                                         
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ar.L1         -0.8892      0.027    -32.441      0.000      -0.943      -0.836
ma.L1         -0.9995      1.502     -0.665      0.506      -3.944       1.945
sigma2       119.3735    179.118      0.666      0.505    -231.692     470.439
===================================================================================
Ljung-Box (L1) (Q):                 162.95   Jarque-Bera (JB):                 0.09
Prob(Q):                              0.00   Prob(JB):                         0.96
Heteroskedasticity (H):               0.54   Skew:                             0.02
Prob(H) (two-sided):                  0.00   Kurtosis:                         3.08
===================================================================================

Warnings:
[1] Covariance matrix calculated using the outer product of gradients (complex-step).
🔍 Analizando la serie: Regular
🔍 Detección de valores inválidos en la serie: Regular
  Valores NaN: 0
  Valores no positivos: 0
  Serie temporal sin valores NaN tiene 281 elementos.
Prueba Dickey-Fuller para Regular: p-valor = 0.9547166884951503
❌ La serie Regular no es estacionaria (p-valor: 0.9547166884951503).
🔄 Aplicando diferenciación a Regular. Intento 1.
Prueba Dickey-Fuller para Regular: p-valor = 8.607670489056085e-12
❌ La varianza no es estable en la serie Regular.
🔄 Aplicando diferenciación a Regular. Intento 2.
Prueba Dickey-Fuller para Regular: p-valor = 1.1514286931342563e-18
❌ La varianza no es estable en la serie Regular.
🔄 Aplicando diferenciación a Regular. Intento 3.
Prueba Dickey-Fuller para Regular: p-valor = 1.4299582821292605e-21
❌ La varianza no es estable en la serie Regular.
🔄 Aplicando diferenciación a Regular. Intento 4.
Prueba Dickey-Fuller para Regular: p-valor = 1.3446729756106482e-22
❌ La varianza no es estable en la serie Regular.
🔄 Aplicando diferenciación a Regular. Intento 5.
Prueba Dickey-Fuller para Regular: p-valor = 2.3198979881378136e-21
❌ La varianza no es estable en la serie Regular.
🔄 Aplicando diferenciación a Regular. Intento 6.
Prueba Dickey-Fuller para Regular: p-valor = 3.8522581992643975e-23
❌ La varianza no es estable en la serie Regular.
🔄 Aplicando diferenciación a Regular. Intento 7.
Prueba Dickey-Fuller para Regular: p-valor = 4.3203576796413914e-27
❌ La varianza no es estable en la serie Regular.
🔄 Aplicando diferenciación a Regular. Intento 8.
Prueba Dickey-Fuller para Regular: p-valor = 1.9830657561682155e-29
❌ La varianza no es estable en la serie Regular.
🔄 Aplicando diferenciación a Regular. Intento 9.
Prueba Dickey-Fuller para Regular: p-valor = 7.512287476786966e-30
❌ La varianza no es estable en la serie Regular.
🔄 Aplicando diferenciación a Regular. Intento 10.
⚠️ No se pudo hacer la serie Regular estacionaria después de 10 intentos.
📈 Utilizando un modelo ARIMA para tratar con la no estacionariedad.
                               SARIMAX Results                                
==============================================================================
Dep. Variable:       Gasolina regular   No. Observations:                  271
Model:                 ARIMA(1, 1, 1)   Log Likelihood               -1459.374
Date:                Sun, 04 Aug 2024   AIC                           2924.747
Time:                        14:50:24   BIC                           2935.542
Sample:                    11-01-2001   HQIC                          2929.082
                         - 05-01-2024                                         
Covariance Type:                  opg                                         
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ar.L1         -0.9238      0.022    -42.730      0.000      -0.966      -0.881
ma.L1         -0.9995      2.543     -0.393      0.694      -5.983       3.984
sigma2      2808.7948   7124.660      0.394      0.693   -1.12e+04    1.68e+04
===================================================================================
Ljung-Box (L1) (Q):                 171.55   Jarque-Bera (JB):                 6.09
Prob(Q):                              0.00   Prob(JB):                         0.05
Heteroskedasticity (H):               0.31   Skew:                            -0.02
Prob(H) (two-sided):                  0.00   Kurtosis:                         3.73
===================================================================================

Warnings:
[1] Covariance matrix calculated using the outer product of gradients (complex-step).
🔍 Analizando la serie: Superior
🔍 Detección de valores inválidos en la serie: Superior
  Valores NaN: 0
  Valores no positivos: 0
  Serie temporal sin valores NaN tiene 1305 elementos.
Prueba Dickey-Fuller para Superior: p-valor = 0.021117919557505475
❌ La varianza no es estable en la serie Superior.
🔄 Aplicando diferenciación a Superior. Intento 1.
Prueba Dickey-Fuller para Superior: p-valor = 2.436091753573115e-16
❌ La varianza no es estable en la serie Superior.
🔄 Aplicando diferenciación a Superior. Intento 2.
Prueba Dickey-Fuller para Superior: p-valor = 3.159810795761913e-22
❌ La varianza no es estable en la serie Superior.
🔄 Aplicando diferenciación a Superior. Intento 3.
Prueba Dickey-Fuller para Superior: p-valor = 2.988167990607026e-27
❌ La varianza no es estable en la serie Superior.
🔄 Aplicando diferenciación a Superior. Intento 4.
Prueba Dickey-Fuller para Superior: p-valor = 2.845364748853002e-30
❌ La varianza no es estable en la serie Superior.
🔄 Aplicando diferenciación a Superior. Intento 5.
Prueba Dickey-Fuller para Superior: p-valor = 0.0
❌ La varianza no es estable en la serie Superior.
🔄 Aplicando diferenciación a Superior. Intento 6.
Prueba Dickey-Fuller para Superior: p-valor = 0.0
❌ La varianza no es estable en la serie Superior.
🔄 Aplicando diferenciación a Superior. Intento 7.
Prueba Dickey-Fuller para Superior: p-valor = 0.0
❌ La varianza no es estable en la serie Superior.
🔄 Aplicando diferenciación a Superior. Intento 8.
Prueba Dickey-Fuller para Superior: p-valor = 0.0
❌ La varianza no es estable en la serie Superior.
🔄 Aplicando diferenciación a Superior. Intento 9.
Prueba Dickey-Fuller para Superior: p-valor = 0.0
❌ La varianza no es estable en la serie Superior.
🔄 Aplicando diferenciación a Superior. Intento 10.
⚠️ No se pudo hacer la serie Superior estacionaria después de 10 intentos.
📈 Utilizando un modelo ARIMA para tratar con la no estacionariedad.
                               SARIMAX Results                                
==============================================================================
Dep. Variable:     Superior GTQ/GALON   No. Observations:                 1295
Model:                 ARIMA(1, 1, 1)   Log Likelihood               -1718.628
Date:                Sun, 04 Aug 2024   AIC                           3443.255
Time:                        14:50:25   BIC                           3458.752
Sample:                    01-11-2021   HQIC                          3449.071
                         - 07-28-2024                                         
Covariance Type:                  opg                                         
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ar.L1         -0.9007      0.006   -148.573      0.000      -0.913      -0.889
ma.L1         -0.9999      1.317     -0.759      0.448      -3.581       1.581
sigma2         0.8275      1.089      0.760      0.447      -1.307       2.962
===================================================================================
Ljung-Box (L1) (Q):                 755.72   Jarque-Bera (JB):              1613.69
Prob(Q):                              0.00   Prob(JB):                         0.00
Heteroskedasticity (H):               0.76   Skew:                             0.00
Prob(H) (two-sided):                  0.01   Kurtosis:                         8.47
===================================================================================

Warnings:
[1] Covariance matrix calculated using the outer product of gradients (complex-step).

Los resultados nos indican de esta forma de automatizar la busqueda de buenos parametros p, d y q resultó efectiva en todas las series. Esto basados en los resultados de AIC y BIC obtenidos. Aun así, se decidió implementar el modelo auto_arima para comparar la diferencia que existen entre estos métodos.

In [ ]:
serie_diesel = serieConsumoDiesel['Diesel']

# Ajustar el modelo ARIMA automáticamente
modelo_auto = auto_arima(serie_diesel,
                          seasonal=False,  # Si no es estacional
                          stepwise=True,   # Si utilizar pasos para encontrar el mejor modelo
                          trace=True)      # Mostrar el progreso

# Resumen del modelo
print(modelo_auto.summary())
Performing stepwise search to minimize aic
 ARIMA(2,1,2)(0,0,0)[0] intercept   : AIC=inf, Time=0.29 sec
 ARIMA(0,1,0)(0,0,0)[0] intercept   : AIC=7447.955, Time=0.01 sec
 ARIMA(1,1,0)(0,0,0)[0] intercept   : AIC=7440.658, Time=0.02 sec
 ARIMA(0,1,1)(0,0,0)[0] intercept   : AIC=7440.979, Time=0.02 sec
 ARIMA(0,1,0)(0,0,0)[0]             : AIC=7446.248, Time=0.01 sec
 ARIMA(2,1,0)(0,0,0)[0] intercept   : AIC=7442.638, Time=0.04 sec
 ARIMA(1,1,1)(0,0,0)[0] intercept   : AIC=7442.627, Time=0.04 sec
 ARIMA(2,1,1)(0,0,0)[0] intercept   : AIC=7444.623, Time=0.08 sec
 ARIMA(1,1,0)(0,0,0)[0]             : AIC=7439.163, Time=0.02 sec
 ARIMA(2,1,0)(0,0,0)[0]             : AIC=7441.126, Time=0.02 sec
 ARIMA(1,1,1)(0,0,0)[0]             : AIC=7441.116, Time=0.04 sec
 ARIMA(0,1,1)(0,0,0)[0]             : AIC=7439.504, Time=0.02 sec
 ARIMA(2,1,1)(0,0,0)[0]             : AIC=7443.087, Time=0.06 sec

Best model:  ARIMA(1,1,0)(0,0,0)[0]          
Total fit time: 0.677 seconds
                               SARIMAX Results                                
==============================================================================
Dep. Variable:                      y   No. Observations:                  293
Model:               SARIMAX(1, 1, 0)   Log Likelihood               -3717.581
Date:                Sun, 04 Aug 2024   AIC                           7439.163
Time:                        17:10:33   BIC                           7446.516
Sample:                    01-01-2000   HQIC                          7442.108
                         - 05-01-2024                                         
Covariance Type:                  opg                                         
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ar.L1         -0.1598      0.043     -3.719      0.000      -0.244      -0.076
sigma2      6.671e+09   4.16e-13    1.6e+22      0.000    6.67e+09    6.67e+09
===================================================================================
Ljung-Box (L1) (Q):                   0.35   Jarque-Bera (JB):                 1.44
Prob(Q):                              0.56   Prob(JB):                         0.49
Heteroskedasticity (H):               2.34   Skew:                            -0.14
Prob(H) (two-sided):                  0.00   Kurtosis:                         3.19
===================================================================================

Warnings:
[1] Covariance matrix calculated using the outer product of gradients (complex-step).
[2] Covariance matrix is singular or near-singular, with condition number    inf. Standard errors may be unstable.
In [ ]:
serie_regular = serieImportacionRegular['Gasolina regular']

# Ajustar el modelo ARIMA automáticamente
modelo_auto = auto_arima(serie_regular,
                          seasonal=False,  # Si no es estacional
                          stepwise=True,   # Si utilizar pasos para encontrar el mejor modelo
                          trace=True)      # Mostrar el progreso

# Resumen del modelo
print(modelo_auto.summary())
Performing stepwise search to minimize aic
 ARIMA(2,1,2)(0,0,0)[0] intercept   : AIC=7193.005, Time=0.09 sec
 ARIMA(0,1,0)(0,0,0)[0] intercept   : AIC=7412.355, Time=0.01 sec
 ARIMA(1,1,0)(0,0,0)[0] intercept   : AIC=7264.099, Time=0.01 sec
 ARIMA(0,1,1)(0,0,0)[0] intercept   : AIC=7230.431, Time=0.05 sec
 ARIMA(0,1,0)(0,0,0)[0]             : AIC=7410.471, Time=0.01 sec
 ARIMA(1,1,2)(0,0,0)[0] intercept   : AIC=7201.550, Time=0.07 sec
 ARIMA(2,1,1)(0,0,0)[0] intercept   : AIC=7200.752, Time=0.06 sec
 ARIMA(3,1,2)(0,0,0)[0] intercept   : AIC=7193.700, Time=0.14 sec
 ARIMA(2,1,3)(0,0,0)[0] intercept   : AIC=7195.543, Time=0.13 sec
 ARIMA(1,1,1)(0,0,0)[0] intercept   : AIC=7198.250, Time=0.04 sec
 ARIMA(1,1,3)(0,0,0)[0] intercept   : AIC=7200.602, Time=0.10 sec
 ARIMA(3,1,1)(0,0,0)[0] intercept   : AIC=7199.638, Time=0.06 sec
 ARIMA(3,1,3)(0,0,0)[0] intercept   : AIC=7189.517, Time=0.34 sec
 ARIMA(4,1,3)(0,0,0)[0] intercept   : AIC=inf, Time=0.35 sec
 ARIMA(3,1,4)(0,0,0)[0] intercept   : AIC=inf, Time=0.37 sec
 ARIMA(2,1,4)(0,0,0)[0] intercept   : AIC=inf, Time=0.40 sec
 ARIMA(4,1,2)(0,0,0)[0] intercept   : AIC=7195.774, Time=0.19 sec
 ARIMA(4,1,4)(0,0,0)[0] intercept   : AIC=inf, Time=0.45 sec
 ARIMA(3,1,3)(0,0,0)[0]             : AIC=7199.639, Time=0.16 sec

Best model:  ARIMA(3,1,3)(0,0,0)[0] intercept
Total fit time: 3.051 seconds
                               SARIMAX Results                                
==============================================================================
Dep. Variable:                      y   No. Observations:                  281
Model:               SARIMAX(3, 1, 3)   Log Likelihood               -3586.758
Date:                Sun, 04 Aug 2024   AIC                           7189.517
Time:                        17:10:38   BIC                           7218.595
Sample:                    01-01-2001   HQIC                          7201.180
                         - 05-01-2024                                         
Covariance Type:                  opg                                         
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
intercept    1.22e+04   2792.661      4.367      0.000    6721.770    1.77e+04
ar.L1         -1.4398      0.063    -22.896      0.000      -1.563      -1.317
ar.L2         -1.2383      0.086    -14.318      0.000      -1.408      -1.069
ar.L3         -0.2493      0.059     -4.218      0.000      -0.365      -0.133
ma.L1          0.3535      0.041      8.556      0.000       0.273       0.434
ma.L2         -0.0481      0.045     -1.062      0.288      -0.137       0.041
ma.L3         -0.8335      0.041    -20.336      0.000      -0.914      -0.753
sigma2       8.31e+09      0.001   1.53e+13      0.000    8.31e+09    8.31e+09
===================================================================================
Ljung-Box (L1) (Q):                   0.07   Jarque-Bera (JB):                37.62
Prob(Q):                              0.79   Prob(JB):                         0.00
Heteroskedasticity (H):               3.23   Skew:                             0.03
Prob(H) (two-sided):                  0.00   Kurtosis:                         4.80
===================================================================================

Warnings:
[1] Covariance matrix calculated using the outer product of gradients (complex-step).
[2] Covariance matrix is singular or near-singular, with condition number 1.1e+29. Standard errors may be unstable.
In [ ]:
serie_super = seriePreciosSuper['Superior GTQ/GALON']

# Ajustar el modelo ARIMA automáticamente
modelo_auto_super = auto_arima(serie_super,
                          seasonal=False,  # Si no es estacional
                          stepwise=True,   # Si utilizar pasos para encontrar el mejor modelo
                          trace=True)      # Mostrar el progreso

# Resumen del modelo
print(modelo_auto.summary())
Performing stepwise search to minimize aic
 ARIMA(2,1,2)(0,0,0)[0] intercept   : AIC=773.104, Time=0.66 sec
 ARIMA(0,1,0)(0,0,0)[0] intercept   : AIC=774.698, Time=0.05 sec
 ARIMA(1,1,0)(0,0,0)[0] intercept   : AIC=776.697, Time=0.07 sec
 ARIMA(0,1,1)(0,0,0)[0] intercept   : AIC=776.697, Time=0.05 sec
 ARIMA(0,1,0)(0,0,0)[0]             : AIC=773.556, Time=0.03 sec
 ARIMA(1,1,2)(0,0,0)[0] intercept   : AIC=779.616, Time=0.11 sec
 ARIMA(2,1,1)(0,0,0)[0] intercept   : AIC=770.964, Time=0.69 sec
 ARIMA(1,1,1)(0,0,0)[0] intercept   : AIC=778.676, Time=0.12 sec
 ARIMA(2,1,0)(0,0,0)[0] intercept   : AIC=777.650, Time=0.05 sec
 ARIMA(3,1,1)(0,0,0)[0] intercept   : AIC=781.620, Time=0.09 sec
 ARIMA(3,1,0)(0,0,0)[0] intercept   : AIC=779.621, Time=0.08 sec
 ARIMA(3,1,2)(0,0,0)[0] intercept   : AIC=771.049, Time=0.99 sec
 ARIMA(2,1,1)(0,0,0)[0]             : AIC=769.409, Time=0.17 sec
 ARIMA(1,1,1)(0,0,0)[0]             : AIC=769.647, Time=0.21 sec
 ARIMA(2,1,0)(0,0,0)[0]             : AIC=776.461, Time=0.03 sec
 ARIMA(3,1,1)(0,0,0)[0]             : AIC=780.423, Time=0.06 sec
 ARIMA(2,1,2)(0,0,0)[0]             : AIC=771.199, Time=0.25 sec
 ARIMA(1,1,0)(0,0,0)[0]             : AIC=775.556, Time=0.02 sec
 ARIMA(1,1,2)(0,0,0)[0]             : AIC=778.410, Time=0.04 sec
 ARIMA(3,1,0)(0,0,0)[0]             : AIC=778.423, Time=0.10 sec
 ARIMA(3,1,2)(0,0,0)[0]             : AIC=768.220, Time=0.37 sec
 ARIMA(4,1,2)(0,0,0)[0]             : AIC=770.135, Time=0.55 sec
 ARIMA(3,1,3)(0,0,0)[0]             : AIC=760.596, Time=0.73 sec
 ARIMA(2,1,3)(0,0,0)[0]             : AIC=768.273, Time=0.54 sec
 ARIMA(4,1,3)(0,0,0)[0]             : AIC=753.584, Time=0.58 sec
 ARIMA(5,1,3)(0,0,0)[0]             : AIC=754.952, Time=0.76 sec
 ARIMA(4,1,4)(0,0,0)[0]             : AIC=755.142, Time=0.88 sec
 ARIMA(3,1,4)(0,0,0)[0]             : AIC=753.109, Time=0.72 sec
 ARIMA(2,1,4)(0,0,0)[0]             : AIC=770.272, Time=0.56 sec
 ARIMA(3,1,5)(0,0,0)[0]             : AIC=752.713, Time=0.76 sec
 ARIMA(2,1,5)(0,0,0)[0]             : AIC=750.713, Time=0.48 sec
 ARIMA(1,1,5)(0,0,0)[0]             : AIC=783.759, Time=0.26 sec
 ARIMA(1,1,4)(0,0,0)[0]             : AIC=782.318, Time=0.12 sec
 ARIMA(2,1,5)(0,0,0)[0] intercept   : AIC=751.866, Time=1.66 sec

Best model:  ARIMA(2,1,5)(0,0,0)[0]          
Total fit time: 12.850 seconds
                               SARIMAX Results                                
==============================================================================
Dep. Variable:                      y   No. Observations:                  281
Model:               SARIMAX(3, 1, 3)   Log Likelihood               -3586.758
Date:                Sun, 04 Aug 2024   AIC                           7189.517
Time:                        17:10:53   BIC                           7218.595
Sample:                    01-01-2001   HQIC                          7201.180
                         - 05-01-2024                                         
Covariance Type:                  opg                                         
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
intercept    1.22e+04   2792.661      4.367      0.000    6721.770    1.77e+04
ar.L1         -1.4398      0.063    -22.896      0.000      -1.563      -1.317
ar.L2         -1.2383      0.086    -14.318      0.000      -1.408      -1.069
ar.L3         -0.2493      0.059     -4.218      0.000      -0.365      -0.133
ma.L1          0.3535      0.041      8.556      0.000       0.273       0.434
ma.L2         -0.0481      0.045     -1.062      0.288      -0.137       0.041
ma.L3         -0.8335      0.041    -20.336      0.000      -0.914      -0.753
sigma2       8.31e+09      0.001   1.53e+13      0.000    8.31e+09    8.31e+09
===================================================================================
Ljung-Box (L1) (Q):                   0.07   Jarque-Bera (JB):                37.62
Prob(Q):                              0.79   Prob(JB):                         0.00
Heteroskedasticity (H):               3.23   Skew:                             0.03
Prob(H) (two-sided):                  0.00   Kurtosis:                         4.80
===================================================================================

Warnings:
[1] Covariance matrix calculated using the outer product of gradients (complex-step).
[2] Covariance matrix is singular or near-singular, with condition number 1.1e+29. Standard errors may be unstable.

De esta manera se comprueba que la diferencia es significativamente alta, ya que entre los modelos propuestos anteriormente y los generados con el auto arima, existe una diferencia en terminos de AIC y de BIC de 3000 aproximadamente en todos los modelos.

Además, con fines de investigación y de verificar cómo las predicciones automatizadas con librerías funcionan, se decidió utilizar la librería de prophet de Facebook para evaluar su rendimiento.

In [ ]:
def calcular_aic_bic(y_true, y_pred, num_params):
    # Calcular log-verosimilitud
    residuals = y_true - y_pred
    n = len(y_true)
    log_likelihood = -0.5 * (n * np.log(np.sum(residuals**2) / n))
    
    # Calcular AIC y BIC
    aic = 2 * num_params - 2 * log_likelihood
    bic = np.log(n) * num_params - 2 * log_likelihood
    
    return aic, bic

def entrenarProphet(serieTiempo, nombre_variable):
    # Preparar los datos
    df_prophet = serieTiempo.reset_index()
    df_prophet.columns = ['ds', 'y']

    # Crear y ajustar el modelo Prophet
    modelo = Prophet()
    modelo.fit(df_prophet)

    # Hacer predicciones
    futuro = modelo.make_future_dataframe(periods=12, freq='M')  # Cambia el número y la frecuencia según tus necesidades
    pronostico = modelo.predict(futuro)

    # Graficar resultados
    modelo.plot(pronostico)
    plt.title(f'Pronóstico de {nombre_variable} usando Prophet')
    plt.show()

    # Calcular AIC y BIC
    y_true = df_prophet['y'].values
    y_pred = pronostico['yhat'][:len(df_prophet)].values
    num_params = len(modelo.params)  # Número de parámetros del modelo
    
    aic, bic = calcular_aic_bic(y_true, y_pred, num_params)
    
    print(f"AIC para {nombre_variable}: {aic}")
    print(f"BIC para {nombre_variable}: {bic}")

# Entrenar el modelo para el Diesel
entrenarProphet(serieConsumoDiesel[['Diesel']], 'Diesel')
entrenarProphet(serieImportacionRegular[['Gasolina regular']], 'Regular')
entrenarProphet(seriePreciosSuper[['Superior GTQ/GALON']], 'Superior')
17:20:53 - cmdstanpy - INFO - Chain [1] start processing
17:20:53 - cmdstanpy - INFO - Chain [1] done processing
No description has been provided for this image
17:20:53 - cmdstanpy - INFO - Chain [1] start processing
17:20:53 - cmdstanpy - INFO - Chain [1] done processing
AIC para Diesel: 6480.70112158008
BIC para Diesel: 6506.4623298432
No description has been provided for this image
17:20:54 - cmdstanpy - INFO - Chain [1] start processing
AIC para Regular: 6387.850788531148
BIC para Regular: 6413.319271216485
17:20:54 - cmdstanpy - INFO - Chain [1] done processing
No description has been provided for this image
AIC para Superior: -279.6520722629985
BIC para Superior: -243.43436402470093

Por una parte, se logran realizar predicciones coherentes como las de diesel y gasolina regular, pero por otra parte, es evidente que las predicciones en algunos casos no cuentan con ningún sentido dado que puede ocurrir cuaquier evento debido al rango que muestran. El ejemplo más evidente es con la serie de precios promedio de la gasolina super. Aún así, es destacable la forma en la que se representan los puntos atípicos, evidenciando las épocas donde se vieron afectadas las series por acotecimientos globales como la pandemia o conflictos geopolíticos.

Dejando lo anterior de lado, los valores de AIC y BIC son significativamente mejores que los de auto arima hablando de las series de Diesel y de Gasolina regular, sin embargo, siguen siendo mejores los que se determinaron manualmente. Por otra parte, resulta interesante la predicción de gasolina superior dado que los valores de AIC y BIC son los mejores obtenidos de todos los métodos implementados.

Predicciones ultimos 3 años¶

In [ ]:
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_absolute_error, mean_absolute_percentage_error


ultimos_3_anos = serieTemporalD['2022-01-01':'2024-12-31']

# Dividir los datos en 70% entrenamiento y 30% prueba
n = len(ultimos_3_anos)
train_size = int(n * 0.7)
train, test = ultimos_3_anos[:train_size], ultimos_3_anos[train_size:]

pred = modelo_arima_diesel.get_prediction(start=test.index[0], end=test.index[-1])

pred_ci = pred.conf_int()
ax = serieTemporalD['2022':].plot(label='observed')
pred.predicted_mean.plot(ax=ax, label='One-step ahead Forecast', alpha=.7, figsize=(14, 4))
ax.fill_between( pred_ci.iloc[:,0],
                pred_ci.iloc[:,1], color='k', alpha=.2)

# Evaluar el modelo
rmse = np.sqrt(mean_squared_error(test, pred.predicted_mean))
mae = mean_absolute_error(test, pred.predicted_mean)
mape = mean_absolute_percentage_error(test, pred.predicted_mean)

print(f'RMSE: {rmse:.2f}')
print(f'MAE: {mae:.2f}')
print(f'MAPE: {mape * 100:.2f}%')  
plt.legend()
plt.title(f'Predicción últimos 3 años Diesel')
plt.show()
RMSE: 9.34
MAE: 8.38
MAPE: 47.00%
No description has been provided for this image

Para la serie de tiempo de consumo de diesel se utilizó información de los últimos 3 años y concretamente en los meses entre septiembre y abril de 2024, se realizó una predicción y se evaluaron para ver qué tanto se asemeajaba a la información real de la serie de tiempo. En la misma, se puede ver que se asemeja bastante visualmente, además el RMSE y el MAE obtenidos son relativamente bajos, lo que indica una buena prediccion. Por otra parte, el MAPE fué de 47% por lo que se puede decir que la predicción es razonable.

In [ ]:
ultimos_3_anos = serieTemporalR['2022-01-01':'2024-12-31']

# Dividir los datos en 70% entrenamiento y 30% prueba
n = len(ultimos_3_anos)
train_size = int(n * 0.7)
train, test = ultimos_3_anos[:train_size], ultimos_3_anos[train_size:]

pred = modelo_arima_regular.get_prediction(start=test.index[0], end=test.index[-1])

pred_ci = pred.conf_int()
ax = serieTemporalR['2022':].plot(label='observed')
pred.predicted_mean.plot(ax=ax, label='One-step ahead Forecast', alpha=.7, figsize=(14, 4))
ax.fill_between( pred_ci.iloc[:,0],
                pred_ci.iloc[:,1], color='k', alpha=.2)

# Evaluar el modelo
rmse = np.sqrt(mean_squared_error(test, pred.predicted_mean))
mae = mean_absolute_error(test, pred.predicted_mean)
mape = mean_absolute_percentage_error(test, pred.predicted_mean)

print(f'RMSE: {rmse:.2f}')
print(f'MAE: {mae:.2f}')
print(f'MAPE: {mape * 100:.2f}%')  

plt.legend()
plt.title(f'Predicción últimos 3 años Regular')
plt.show()

pred
RMSE: 17.56
MAE: 13.31
MAPE: 136.39%
No description has been provided for this image
Out[ ]:
<statsmodels.tsa.statespace.mlemodel.PredictionResultsWrapper at 0x2dc4c777f90>

Para esta predicción podemos ver en la gráfica de la serie de tiempo, la predicción inicia alineada a los datos reales, sin embargo se desalinea en las siguientes partes. El RMSE y el MAE son relativamente bajos aunque más altos que la anterior, sin embargo el MAPE es casi del 136% por lo que indica una predicción bastante pobre.

In [ ]:
ultimos_3_anos = serieTemporalS['2022-01-01':'2024-12-31']

# Dividir los datos en 70% entrenamiento y 30% prueba
n = len(ultimos_3_anos)
train_size = int(n * 0.7)
train, test = ultimos_3_anos[:train_size], ultimos_3_anos[train_size:]

pred = modelo_arima_super.get_prediction(start=test.index[0], end=test.index[-1])

pred_ci = pred.conf_int()
ax = serieTemporalS['2022':].plot(label='observed')
pred.predicted_mean.plot(ax=ax, label='One-step ahead Forecast', alpha=.7, figsize=(14, 4))
ax.fill_between( pred_ci.iloc[:,0],
                pred_ci.iloc[:,1], color='k', alpha=.2)

# Evaluar el modelo
rmse = np.sqrt(mean_squared_error(test, pred.predicted_mean))
mae = mean_absolute_error(test, pred.predicted_mean)
mape = mean_absolute_percentage_error(test, pred.predicted_mean)

print(f'RMSE: {rmse:.2f}')
print(f'MAE: {mae:.2f}')
print(f'MAPE: {mape * 100:.2f}%')  

plt.legend()
plt.title(f'Predicción últimos 3 años Superior')
plt.show()

pred
RMSE: 0.77
MAE: 0.52
MAPE: 7882774729377.25%
No description has been provided for this image
Out[ ]:
<statsmodels.tsa.statespace.mlemodel.PredictionResultsWrapper at 0x2dc68fb6b50>

Para esta predicción podemos ver en la gráfica de la serie de tiempo que la predicción se mantiene bastante alineada a los datos reales. El RMSE y el MAE son bastante bajos, lo que podría dar indicios de una buena predicción, sin embargo el MAPE es demasiado grande, indicandonos que igualmente sería una predicción bastante pobre.

Prediccion para 2024¶

In [ ]:
actual_year = serieTemporalD['2024-01-01':'2024-12-31']

# Dividir los datos en 70% entrenamiento y 30% prueba
n = len(actual_year)
train_size = int(n * 0.7)
train, test = actual_year[:train_size], actual_year[train_size:]

pred = modelo_arima_diesel.get_prediction(start=test.index[0], end='2024-12-31')

pred_ci = pred.conf_int()
ax = serieTemporalD['2024':].plot(label='observed')
pred.predicted_mean.plot(ax=ax, label='One-step ahead Forecast', alpha=.7, figsize=(14, 4))
ax.fill_between( pred_ci.iloc[:,0],
                pred_ci.iloc[:,1], color='k', alpha=.2)





plt.legend()
plt.title(f'Predicción 2024 Diesel')
plt.show()

# Alinear las predicciones y los valores reales para asegurarse de que tienen la misma longitud
predictions = pred.predicted_mean.loc[test.index]
true_values = test

# Calcular intervalo de confianza
pred_ci = pred.conf_int().loc[test.index]

# Calcular errores
rmse = np.sqrt(mean_squared_error(true_values, predictions))
mae = mean_absolute_error(true_values, predictions)
mape = np.mean(np.abs((true_values - predictions) / true_values)) * 100

print(f'RMSE: {rmse}')
print(f'MAE: {mae}')
print(f'MAPE: {mape:.2f}%')
No description has been provided for this image
RMSE: 4.790903186877741
MAE: 4.561657135595812
MAPE: 22.95%

Haciendo la predicción pero solo con el año 2024 para el consumo de diesel, podemos ver que empieza bastante alineada con los datos reales. El RMSE y el MAE son relativamente bajos y el MAPE es del casi 23% lo que nos dice que no es una excelente predicción pero es bastante razonable.

In [ ]:
actual_year = serieTemporalR['2024-01-01':'2024-12-31']

# Dividir los datos en 70% entrenamiento y 30% prueba
n = len(actual_year)
train_size = int(n * 0.7)
train, test = actual_year[:train_size], actual_year[train_size:]

pred = modelo_arima_regular.get_prediction(start=test.index[0], end='2024-12-31')

pred_ci = pred.conf_int()
ax = serieTemporalR['2024':].plot(label='observed')
pred.predicted_mean.plot(ax=ax, label='One-step ahead Forecast', alpha=.7, figsize=(14, 4))
ax.fill_between( pred_ci.iloc[:,0],
                pred_ci.iloc[:,1], color='k', alpha=.2)

plt.title(f'Predicción 2024 Regular')
plt.legend()
plt.show()


# Alinear las predicciones y los valores reales para asegurarse de que tienen la misma longitud
predictions = pred.predicted_mean.loc[test.index]
true_values = test

# Calcular intervalo de confianza
pred_ci = pred.conf_int().loc[test.index]

# Calcular errores
rmse = np.sqrt(mean_squared_error(true_values, predictions))
mae = mean_absolute_error(true_values, predictions)
mape = np.mean(np.abs((true_values - predictions) / true_values)) * 100

print(f'RMSE: {rmse}')
print(f'MAE: {mae}')
print(f'MAPE: {mape:.2f}%')
No description has been provided for this image
RMSE: 31.710895539342097
MAE: 31.408330118821873
MAPE: 321.42%

En la predicción de serie de tiempo de importación regular con el año 2024 podemos ver que el RMSE y el MAE son más altos de lo usual y el MAPE sobrepasa el 100%, lo que indicaría una predicción bastante pobre. En comparativa, es mejor la predicción que cuenta con más años antes del 2024.

In [ ]:
actual_year = serieTemporalS['2024-01-01':'2024-12-31']

# Dividir los datos en 70% entrenamiento y 30% prueba
n = len(actual_year)
train_size = int(n * 0.7)
train, test = actual_year[:train_size], actual_year[train_size:]

pred = modelo_arima_super.get_prediction(start=test.index[0], end='2024-12-31')

pred_ci = pred.conf_int()
ax = serieTemporalS['2024':].plot(label='observed')
pred.predicted_mean.plot(ax=ax, label='One-step ahead Forecast', alpha=.7, figsize=(14, 4))
ax.fill_between( pred_ci.iloc[:,0],
                pred_ci.iloc[:,1], color='k', alpha=.2)

plt.legend()
plt.title(f'Predicción 2024 Superior')
plt.show()


# Alinear las predicciones y los valores reales para asegurarse de que tienen la misma longitud
predictions = pred.predicted_mean.loc[test.index]
true_values = test

# Calcular intervalo de confianza
pred_ci = pred.conf_int().loc[test.index]

# Calcular errores
rmse = np.sqrt(mean_squared_error(true_values, predictions))
mae = mean_absolute_error(true_values, predictions)
mape = np.mean(np.abs((true_values - predictions) / true_values)) * 100

print(f'RMSE: {rmse}')
print(f'MAE: {mae}')
print(f'MAPE: {mape:.2f}%')
No description has been provided for this image
RMSE: 0.32406539665899864
MAE: 0.23132556421351486
MAPE: inf%

Por último en la predicción de los precios de la gasolina superior, se puede observar que el modelo del año 2024 no fue el adecuado para realizar la predicción, ya que el modelo casi no se ajusta a los datos reales. A pesar que el RMSE y el MAE salieron batante bajos, MAPE llego casi a infinito indicando una predicción muy pobre, igualmente se puede observar esa mala predicción en la gráfica.

Comportamiendo durante pandemia¶

In [ ]:
actual_year = serieTemporalD['2020-01-01':]

# Dividir los datos en 70% entrenamiento y 30% prueba
n = len(actual_year)
train_size = int(n * 0.7)
train, test = actual_year[:train_size], actual_year[train_size:]

pred = modelo_arima_diesel.get_prediction(start=test.index[0], end='2024-12-31')

pred_ci = pred.conf_int()
ax = serieTemporalD['2020':].plot(label='observed')
pred.predicted_mean.plot(ax=ax, label='One-step ahead Forecast', alpha=.7, figsize=(14, 4))
ax.fill_between( pred_ci.iloc[:,0],
                pred_ci.iloc[:,1], color='k', alpha=.2)


plt.legend()
plt.title(f'Comportamiendo en 2020')
plt.show()

# Alinear las predicciones y los valores reales para asegurarse de que tienen la misma longitud
predictions = pred.predicted_mean.loc[test.index]
true_values = test

# Calcular intervalo de confianza
pred_ci = pred.conf_int().loc[test.index]

# Calcular errores
rmse = np.sqrt(mean_squared_error(true_values, predictions))
mae = mean_absolute_error(true_values, predictions)
mape = np.mean(np.abs((true_values - predictions) / true_values)) * 100

print(f'RMSE: {rmse}')
print(f'MAE: {mae}')
print(f'MAPE: {mape:.2f}%')
No description has been provided for this image
RMSE: 10.78909174355549
MAE: 9.528774374289872
MAPE: 36.71%

Podemos ver que para el consumo de gasolina diesel durante 2020 fue más bajo de lo normal, luego para 2021 y 2022 se puede ver un poco de aumento, hasta 2023 que este aumento fue significativo. Debido a la baja de consumo durante el año 2020 y la costosa recuperación entre 2021 y 2022, se puede considerar que puede afectar la predicción ya que se pudo ver un abrupto cambio en 2023 a comparación de los años cercanos a la pandemia ya que el valle generado en la pandemia no es considerado un comportamiento usual en el consumo.

In [ ]:
actual_year = serieTemporalR['2020-01-01':]

# Dividir los datos en 70% entrenamiento y 30% prueba
n = len(actual_year)
train_size = int(n * 0.7)
train, test = actual_year[:train_size], actual_year[train_size:]

pred = modelo_arima_regular.get_prediction(start=test.index[0], end='2024-12-31')

pred_ci = pred.conf_int()
ax = serieTemporalR['2020':].plot(label='observed')
pred.predicted_mean.plot(ax=ax, label='One-step ahead Forecast', alpha=.7, figsize=(14, 4))
ax.fill_between( pred_ci.iloc[:,0],
                pred_ci.iloc[:,1], color='k', alpha=.2)

plt.title(f'Comportamiento en 2020')
plt.legend()
plt.show()


# Alinear las predicciones y los valores reales para asegurarse de que tienen la misma longitud
predictions = pred.predicted_mean.loc[test.index]
true_values = test

# Calcular intervalo de confianza
pred_ci = pred.conf_int().loc[test.index]

# Calcular errores
rmse = np.sqrt(mean_squared_error(true_values, predictions))
mae = mean_absolute_error(true_values, predictions)
mape = np.mean(np.abs((true_values - predictions) / true_values)) * 100

print(f'RMSE: {rmse}')
print(f'MAE: {mae}')
print(f'MAPE: {mape:.2f}%')
No description has been provided for this image
RMSE: 18.11992975727239
MAE: 13.964687409995861
MAPE: 90.00%

Para la importación de gasolina regular se puede ver que no hubo mayor cambio en la fluctuación de importaciones ya que en 2020 mostraban un alza, luego bajo un poco, a inicios de 2021 volvió a subir y bajo una temporada, luego 2022 vuelve a subir y bajar al final. La pequeña diferencia es que en 2023, la parte alta fue un poco más que los años anteriores, probablemente por la recuperación que se vió en ese año, hasta llegar a 2024 sin cambiar casi nada a inicios de ese mismo año. Podemos ver que la predicción no es tan buena y puede deberse a las fluctuaciones de cada año.

In [ ]:
actual_year = serieTemporalS['2021-01-01':]

# Dividir los datos en 70% entrenamiento y 30% prueba
n = len(actual_year)
train_size = int(n * 0.7)
train, test = actual_year[:train_size], actual_year[train_size:]

pred = modelo_arima_super.get_prediction(start=test.index[0], end='2024-12-31')

pred_ci = pred.conf_int()
ax = serieTemporalS['2021':].plot(label='observed')
pred.predicted_mean.plot(ax=ax, label='One-step ahead Forecast', alpha=.7, figsize=(14, 4))
ax.fill_between( pred_ci.iloc[:,0],
                pred_ci.iloc[:,1], color='k', alpha=.2)

plt.legend()
plt.title(f'Predicción 2024 Superior')
plt.show()


# Alinear las predicciones y los valores reales para asegurarse de que tienen la misma longitud
predictions = pred.predicted_mean.loc[test.index]
true_values = test

# Calcular intervalo de confianza
pred_ci = pred.conf_int().loc[test.index]

# Calcular errores
rmse = np.sqrt(mean_squared_error(true_values, predictions))
mae = mean_absolute_error(true_values, predictions)
mape = np.mean(np.abs((true_values - predictions) / true_values)) * 100

print(f'RMSE: {rmse}')
print(f'MAE: {mae}')
print(f'MAPE: {mape:.2f}%')
No description has been provided for this image
RMSE: 0.7509319468696994
MAE: 0.5098981943527374
MAPE: inf%

Finalmente tenemos los precios de la gasolina super, la cual es un poco más dificil de ver la predicción de la gráfica ya que solo cuenta con el año 2021 en adelante. Aún así, basandonos en el comportamiento de predicciones anteriores se ve que durante el año 2021 hasta inicios del 2022, los cambios registrados fueron un poco más bajos, lo cual se le podría atribuir a la pandemia. Luego en el 2022 hubo un aumento significativo hasta llegar a 2023 donde se registró una pequeña disminución que se mantuvo hasta 2024. En este modelo podemos ver que tanto en periodos anteriores como actuales, cuentan con cierta incertidumbre de predicción a futuro por lo que es considerado uno de los peores modelos que se pudieron dar entre los de gasolina regular y diesel, por lo que a pesar que no cuenta con el año 2020 para determinar si la pandemia fue lo que afectó principalmente, se puede evidenciar que fué el peor modelo de predicción.

Posiblemente el mejor de todos y el único modelo razonable de predicción fue el de consumo de diesel, ya que fué el que mejor pudo predecir y evidenciar fluctuaciones durante la pandemia.